2012-07-04 6 views
10

Сегодня я играл с Eclipse Juno. Исходя из Гелиоса, это отличное обновление. Все работает нормально, кроме одной новой ошибки компиляции.Является ли Eclipse Juno ошибочным с этой двусмысленной ошибкой метода?

Мы используем рамки java.net 'Fuse' и мы называем следующий метод:

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

Затмение говорит нам:

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

следующие методы конфликтуют:

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

Он отлично работал (с Java 1.6.0.25) в Eclipse Helios, но теперь он дает ошибку компиляции и не хочет запускать никаких Больше. Нам кажется, что это ошибка в 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):

  • Per 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

В основном, чтобы исправить ошибку компилятора, получить последнее затмение Juno релиз сборки (4.2.1 как сейчас), добавьте следующую строку после -vmargs в eclipse.ini: (тогда вам возможно, потребуется перезагрузить затмение и восстановить вас проекты)

-DtolerateIllegalAmbiguousVarargsInvocation=true 
+0

«терпеть» следует указать, что это было сделано намеренно ... это была ошибка в Java 5 и 6, по-видимому, были исправлены в Java 7: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6886431 ** ожидаемое поведение **: ошибка компилятора. –

+0

это не работает в неоне? –

+0

@NicholasDiPiazza У меня Neon 1.a, и это тоже не работает для меня. –

0

это действительно странно, что, если изменить API

инъекционные (булево arg0, объект ... arg1);

в

Inject (Boolean arg0, Object ...арг1);

затем впрыснуть (правда, это) не двусмысленным больше

Я считает, что ошибка исправить http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6199075, безусловно, плохая идея

+0

Я сам это заметил. Мораль, кажется, не предшествует переменному параметру аргумента с примитивным типом. У меня возникла эта проблема при попытке перейти на Juno и изменить метод (int, Object []) на метод (Integer, Object []). Поскольку компилятор будет применять это, похоже, мало альтернативы для работы с программой. –