2012-07-04 40 views
10

今天我一直在玩Eclipse Juno。來自Helios這是一個很棒的升級。一切都工作正常,除了一個新的編譯錯誤。Eclipse Juno是否存在此模糊方法錯誤?

我們使用java.net框架 '保險絲',我們調用下面的方法:

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構建,那麼它的構建是正確的......是否有人知道解決此問題的方法?

回答

8

這實際上是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 <:對象是不正確的)

一個變通辦法(我們不能更改保險絲本身):

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

2

相關的問題在這裏:"method is ambiguous for the type" but the types are NOT ambiguous (and the error comes by upgrade from eclipse 3.7.2 to eclipse 4.2),複製我的回答:

已爲此問題提交併解決了一個錯誤bug 383780
這裏是修復的文件: https://bugs.eclipse.org/bugs/attachment.cgi?id=218320

基本上,修復編譯器錯誤,獲得最新的Eclipse朱諾發佈版本(4.2.1截至目前),添加以下行-vmargseclipse.ini:(那麼你可能需要重新啓動Eclipse和重建項目你)

-DtolerateIllegalAmbiguousVarargsInvocation=true 
+0

「容忍」應該指出,這是故意的......這是一個錯誤Java 5和Java 6顯然已在Java 7中修復:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431 **期望的行爲**:編譯器錯誤。 –

+0

這似乎不適用於霓虹燈? –

+0

@NicholasDiPiazza我有霓虹燈1.a,這對我也不起作用。 –

0

這是非常奇怪的是,如果你改變了API

注入(布爾爲arg0,對象... ARG1);

inject(Boolean arg0,Object ...ARG1);

再注入(真實的,這一點)也不含糊任何更多

我認爲bug修復http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6199075絕對是一個壞主意

+0

我自己也注意到了這一點。道德似乎是,不要在具有原始類型的變量參數之前。嘗試升級到Juno並將方法(int,Object [])更改爲method(Integer,Object [])時,我遇到了這個問題。由於編譯器將會執行此操作,因此似乎沒有辦法使用該程序。 –