java - 为什么 Java 认为我的构造函数调用不明确?

标签 java eclipse polymorphism java-6

我在 java 应用程序中有以下代码:

UserMessage um = new UserMessage("a string", 
                                 false, 
                                 "another String", 
                                 "one last string");

Eclipse 告诉我这行代码有错误:

The constructor UserMessage(String, Object[]) is ambiguous  

UserMessage 的所有构造函数的签名是:

1. public UserMessage(String key)
2. public UserMessage(String key, boolean escapeHTML, Object... args)
3. public UserMessage(String key, Object... args)
4. public UserMessage(ErrorCode code)
5. public UserMessage(ErrorCode code, Object... args)

对我来说,很明显我调用的构造函数应该指向上面的#2。该错误似乎表明它认为它可能指向第三个构造函数。

为什么这个调用有歧义?我唯一能想到的是,如果 false 出于某种原因转换为 Boolean 对象,但显然这不是我的代码所做的 - 所以这必须是java 编译器自己做的事情。

最佳答案

这看起来像是将 boolean 值自动装箱为 boolean 值的问题,因此编译器无法判断构造函数是否传递了一个字符串、一个 boolean 值和可变参数对象数组中的两个字符串(#2),或者一个字符串和一个可变参数对象数组,其中包含一个 boolean 值、一个字符串和另一个字符串 (#3)。

"There is a strong synergy between autoboxing and varargs,"

预计到达时间:如果您想区分构造函数,您可以尝试将 Object...varargs 更改为 String...varargs (如果您的实现中可以这样做)。这应该可以防止将 boolean 值自动装箱为 boolean 值,从而在构造函数 #2 和 #3 之间产生歧义。

ETA2:刚刚在 Eclipse 中检查了我的建议,并将构造函数中的 Object... varargs 更改为 String... varargs 消除了歧义错误,因此看起来问题是将 boolean 值自动装箱为 boolean 值。

关于java - 为什么 Java 认为我的构造函数调用不明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32354902/

相关文章:

java - 如果我有足够的内存,我应该使用 stringBuilder 重写字符串连接吗?

java - 我正在尝试对处理中的图像进行马赛克效果,但图像保持不变?

java - Eclipse - 如何调试输入参数更改

java - Eclipse 在循环中执行 java 应用程序

Java:使函数不是虚拟的-在父引用上调用父方法

c++ - 来自普通函数的虚函数调用

java - 捕捉桌面图像

java - 无法安装 cron 作业

c++ - 如何创建单独的库以包含在 C++/Eclipse 中

python - 返回类型取决于 Python 中的输入类型