11

今天我一直在玩 Eclipse Juno。来自 Helios,这是一次很棒的升级。一切正常,除了一个新的编译错误。

我们正在使用 java.net 框架'Fuse',我们调用以下方法:

ResourceInjector.get().inject(true, this);

Eclipse 告诉我们:

The method inject(Object[]) is ambiguous for the type ResourceInjector

以下方法发生冲突:

inject(Object... components);
inject(boolean arg0, Object... arg1);

它在 Eclipse Helios 中运行良好(使用 Java 1.6.0.25),但现在它给出了编译错误并且不想再运行了。在我们看来,这是 Eclipse Juno 中的一个错误,如果我们使用 Maven 构建,则构建良好......有人知道解决这个问题的方法吗?

4

3 回答 3

9

这实际上是 Java 5 和 Java 6 中的一个错误。这已在 Java 7 中得到修复,Eclipse 现在会检查这个“错误”。

更多关于这里的错误:http: //bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6886431

在以下情况下应该调用什么方法?

inject(true);

当然,两者都可以应用,但是原始布尔值肯定是更好的匹配吗?不符合 Java 语言规范 (JLS):

  • 根据 15.12.2.5,两者都不比另一个更具体(int <: Object is not true)

一种解决方法(我们无法更改 Fuse 本身):

ResourceInjector.get().inject(true, new Object[] {this});

于 2012-07-05T09:55:00.137 回答
2

此处的相关问题:“方法对于类型不明确”但类型并不模糊(错误来自从 eclipse 3.7.2 升级到 eclipse 4.2),复制我的答案:

已针对此问题bug 383780提交并修复了一个错误。
这是修复的文档: https ://bugs.eclipse.org/bugs/attachment.cgi?id=218320

基本上,要修复编译器错误,请获取最新的 eclipse Juno 版本构建(截至目前为4.2.1-vmargs ),在后面添加以下行eclipse.ini:(然后您可能需要重新启动 eclipse 并重建您的项目)

-DtolerateIllegalAmbiguousVarargsInvocation=true
于 2012-11-13T01:00:12.210 回答
0

真的很奇怪,如果你改变 API

注入(布尔 arg0,对象... arg1);

注入(布尔 arg0,对象... arg1);

然后注入(真,这个)不再模棱两可

我认为错误修复http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6199075绝对是一个坏主意

于 2013-02-06T10:20:42.357 回答