2012-07-04 7 views
10

Oggi ho giocato con Eclipse Juno. Venendo da Helios è un grande aggiornamento. Tutto funziona bene, tranne un nuovo errore di compilazione.Eclipse Juno ha torto con questo errore di metodo ambiguo?

Stiamo usando il quadro java.net 'Fuse' e che noi chiamiamo il seguente metodo:

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

i seguenti metodi si scontrano::

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

Eclipse ci dice

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

Ha funzionato bene (con Java 1.6.0.25) in Eclipse Helios, ma ora dà un errore di compilazione e non vuole eseguire alcun Di Più. Ci sembra che questo sia un bug in Eclipse Juno, se costruiamo usando Maven è perfetto ... Qualcuno sa come aggirare questo?

risposta

8

Questo è in realtà un bug in Java 5 e Java 6. Questo problema è stato risolto in Java 7 ed Eclipse ora verifica questo 'bug'.

Maggiori informazioni sul bug qui: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431

Quale metodo dovrebbe essere chiamato nel seguente caso?

inject(true); 

Entrambi si possono applicare, certo, ma il primitivo booleano è sicuramente un abbinamento migliore? Non secondo il linguaggio Java Specification (JLS):

  • Per 15.12.2.5, nessuno dei due è più specifica rispetto agli altri (INT <: L'oggetto non è vero)

un work-around (noi non sono in grado di cambiare fusibile stesso):

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

2

questione connessa qui: "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), copiando la mia risposta:

Un bug è stato archiviato e risolto per questo problema bug 383780.
Qui è la documentazione della correzione: https://bugs.eclipse.org/bugs/attachment.cgi?id=218320

In sostanza, per correggere l'errore del compilatore, ottenere l'ultima eclisse Juno build di rilascio (4.2.1 fin d'ora), aggiungere la seguente riga dopo -vmargs in eclipse.ini: (allora si potrebbe essere necessario riavviare Eclipse e ricostruire progetti)

-DtolerateIllegalAmbiguousVarargsInvocation=true 
+0

"tollerare" dovrebbe indicare che questo è stato intenzionale ... era un bug in Java 5 e 6, apparentemente, è stato risolto in Java 7: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431 ** comportamento previsto **: errore del compilatore. –

+0

questo non sembra funzionare in neon? –

+0

@NicholasDiPiazza Ho Neon 1.a e questo non funziona neanche per me. –

0

è davvero strano che, se si cambia l'API

iniettare (arg0 booleano, oggetto ... arg1);

a

iniettare (arg0 booleano, oggetto ...arg1);

poi iniettare (vero, questo) non è più ambiguo

io pensa che il bug fix http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6199075 è sicuramente una cattiva idea

+0

L'ho notato anch'io. La morale sembra essere, non precedere un parametro argomento variabile con un tipo primitivo. Ho avuto questo problema quando ho provato ad aggiornare a Juno e cambiare metodo (int, Object []) a method (Integer, Object []) funziona correttamente. Dal momento che il compilatore imporrà questo, sembra che ci sia poca alternativa al programma. –