11

今日はEclipseJunoで遊んでいます。ヘリオスから来て、それは素晴らしいアップグレードです。1つの新しいコンパイルエラーを除いて、すべてが正常に機能しています。

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で)正常に動作しましたが、コンパイルエラーが発生し、実行したくなくなりました。これはEclipseJunoのバグのようですが、Mavenを使用してビルドすると、正常にビルドされます...誰かがこれの回避策を知っていますか?

4

3 に答える 3

9

これは実際にはJava5およびJava6のバグです。これはJava7で修正されており、Eclipseはこの「バグ」をチェックするようになりました。

バグの詳細はこちら: http: //bugs.sun.com/bugdatabase/view_bug.do?bug_id = 6886431

次の場合、どのメソッドを呼び出す必要がありますか?

inject(true);

どちらも適用できますが、プリミティブブール値の方が確実に一致しますか?Java言語仕様(JLS)に準拠していません:

  • 15.12.2.5によると、どちらも他よりも具体的ではありません(int <:オブジェクトは真ではありません)

回避策(Fuse自体を変更することはできません):

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

于 2012-07-05T09:55:00.137 に答える
2

ここでの関連質問:「メソッドはタイプに対してあいまいです」が、タイプはあいまいではありません(そして、エラーはEclipse3.7.2からEclipse4.2へのアップグレードによって発生します)、私の答えをコピーします:

この問題のバグ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を変更した場合、それは本当に奇妙です

inject(boolean arg0、Object ... arg1);

inject(Boolean arg0、Object ... arg1);

次に、(true、this)を注入します。これ以上あいまいではありません。

バグ修正http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6199075は間違いなく悪い考えだと思います

于 2013-02-06T10:20:42.357 に答える