java - 如何在java中扩展以下API函数而不导致二义性

标签 java api overloading

我有一些现有的重载 API:

1). foo(a, b) { return foo(a, b, null); }
2). foo(a, b, c) {return foo(a,b,c,null);}
3). foo(a, b, c, d) { implement of the function...; }

其中a、b、c是一些数据结构,其值也可以为空。 现在我需要使用标志来扩展 API。即

4). foo(a, b, Boolean flag)
5). foo(a, b, c, Boolean flag)
6). foo(a, b, c, d, Boolean flag)

其中 boolean 值可以为 null/false/true; 为了兼容性,现有的 API 应该仍然存在。

问题是:当调用 foo(a, b, null) 时,2) 和 4) 是不明确的。 3) 和 5) 也是如此。

我的问题:一般来说我们应该如何扩展新的 API?

最佳答案

a) 您可以为新方法指定不同的名称。 fooWithFlag

b) 您不能允许 null (大概它与之前没有标志的方法执行相同的操作),并使用原始 boolean 代替

c) 您可以创建一个子接口(interface) ServiceWithFlagsServiceV2 并仅在其上放置新方法。新代码可以通过使用新接口(interface)来使用它,旧代码仍然使用旧接口(interface)并且不会看到方法。

d) 这只是一个编译时错误。这不会破坏已经编译的代码。所以您实际上可以继续添加新方法。任何歧义都会被编译器捕获,并在开发过程中轻松修复。

关于java - 如何在java中扩展以下API函数而不导致二义性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28736276/

相关文章:

sql - 使用默认值重载 Postgres 函数 - 我的函数是不可调用的吗?

c++ - 防止模板化成员函数中某些参数的隐式转换

java - 基本的 ORMLite 数据库问题

java - 在 Maven 项目中更改编码(CP-1252 到 UTF-8)时,我应该如何处理编码为 iso-8859-1 的 XML 文件

json - 我的 API 是否应该将 JSON 数据嵌套在父对象中?

java - 使用 Rest Assured GET 方法获取错误代码 503

ruby-on-rails - REST Api 和语义版本控制

c++ - 具有两个 getInstance() 方法的单例移交父指针?

java - .forward(req, resp) 之后的 HttpServletRequest 有什么问题?

java - Seam Faces 导致部署时错误