2012-07-04 15 views
10

Dzisiaj bawię się z Eclipse Juno. Pochodzący z Helios jest świetnym ulepszeniem. Wszystko działa dobrze, z wyjątkiem jednego nowego błędu kompilacji.Czy błąd Eclipse Juno jest związany z tym niejednoznacznym błędem metody?

Używamy ram java.net 'Fuse' i nazywamy następującą metodę:

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

Eclipse mówi nam:

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

zderzają się następujące metody:

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

To działało dobrze (z Javą 1.6.0.25) w Eclipse Helios, ale teraz daje błąd kompilacji i nie chce uruchamiać żadnych jeszcze. Wydaje nam się, że jest to błąd w Eclipse Juno, jeśli zbudujemy, używając Mavena, wszystko będzie dobrze ... Czy ktoś wie, jak to zrobić?

Odpowiedz

8

To jest właściwie błąd w Java 5 i Java 6. Zostało to naprawione w Javie 7, a Eclipse sprawdza teraz "błąd".

Więcej o bug tutaj: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431

Jakie metody powinny być nazywany w następującym przypadku?

inject(true); 

Oba mogą być stosowane, oczywiście, ale prymitywna wartość logiczna na pewno lepiej pasuje? Nie według języka Java Specification (JLS):

  • Per 15.12.2.5, nie jest bardziej szczegółowy niż inne (int <: Przedmiot nie jest prawdą)

obejście (my nie są w stanie zmienić sam bezpiecznik):

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

2

Powiązane pytanie tutaj: "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), kopiowanie moja odpowiedź:

Dla tego problemu został zgłoszony błąd, który został naprawiony bug 383780.
Oto dokumentacja Fix: https://bugs.eclipse.org/bugs/attachment.cgi?id=218320

Zasadniczo, aby naprawić błąd kompilatora, uzyskać najnowszy Eclipse Juno zwalniającą budowlanej (4.2.1 jak na razie), należy dodać następujący wiersz po -vmargs w eclipse.ini (wtedy może trzeba ponownie uruchomić eclipse i odbudować Ci projektów)

-DtolerateIllegalAmbiguousVarargsInvocation=true 
+0

„tolerować” powinien wskazywać, że to było celowe ... to był błąd w Java 5 i 6, najwyraźniej zostały naprawione w Javie 7: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431 ** oczekiwane zachowanie **: błąd kompilatora. –

+0

to nie działa w neonach? –

+0

@NicholasDiPiazza Mam Neon 1.a i to też nie działa dla mnie. –

0

to jest naprawdę dziwne, że jeśli zmienisz API

inject (logiczna arg0, obiekt ... arg1);

do

inject (Boolean arg0, Object ...arg 1);

następnie wstrzyknąć (prawda, tego) nie dwuznaczny więcej

I uważa, że ​​bug fix http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6199075 jest zdecydowanie zły pomysł

+0

Sam to zauważyłem. Morał wydaje się być, nie poprzedzaj zmiennego parametru argumentu typem pierwotnym. Miałem ten problem podczas próby aktualizacji do Juno i zmiana metody (int, Object []) na metodę (Integer, Object []) działa dobrze. Ponieważ kompilator będzie to wymuszał, wydaje się, że niewiele jest możliwości, aby uzyskać dostęp do programu. –