Mit*_*tch 2 java eclipse polymorphism java-6
我在java应用程序中有以下代码:
UserMessage um = new UserMessage("a string",
false,
"another String",
"one last string");
Run Code Online (Sandbox Code Playgroud)
Eclipse告诉我这行代码有错误:
The constructor UserMessage(String, Object[]) is ambiguous
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
对我而言,我正在调用的构造函数应该指向上面的#2.这个错误似乎告诉我它认为它可能指向第三个构造函数.
为什么这个电话有歧义?我唯一能想到的是false,由于某种原因,是否会被投射到一个Boolean对象,但显然这不是我的代码所做的 - 所以这必须是java编译器自己做的事情.
将布尔值自动装箱到布尔值中似乎是一个问题,因此编译器无法判断构造函数是否在varargs对象数组(#2)中传递了一个String,一个布尔值和两个字符串,或者字符串和包含Boolean,String和另一个String(#3)的varargs Object数组.
"autoboxing和varargs之间存在强大的协同作用,"
ETA:如果您想区分构造函数,可以尝试将Object ... varargs更改为String ... varargs,如果在您的实现中可行的话.这应该可以防止布尔值自动装入布尔值,从而在构造函数#2和#3之间产生歧义.
ETA2:刚刚在Eclipse中检查了我的建议,并将构造函数中的Object ... varargs更改为String ... varargs消除了歧义错误,因此看起来问题是将布尔值自动装箱为布尔值.
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |