Подтвердить что ты не робот

Является ли Eclipse Juno ошибочным с этой двусмысленной ошибкой метода?

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

Мы используем java.net framework '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);

Он отлично работал (с Java 1.6.0.25) в Eclipse Helios, но теперь он дает ошибку компиляции и больше не хочет запускаться. Нам кажется, что это ошибка в Eclipse Juno, если мы построим с помощью Maven, это прекрасно... Кто-нибудь знает об этом?

4b9b3361

Ответ 1

На самом деле это ошибка в 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 <: Object is not true)

Обход (мы не можем изменить сам Fuse):

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

Ответ 2

Связанный с этим вопрос: метод неоднозначен для типа " но типы НЕ являются двусмысленными (и ошибка возникает при обновлении от eclipse 3.7.2 до eclipse 4.2), копируя мой ответ:

Исправлена ​​ошибка и исправлена ​​эта проблема ошибка 383780.
Вот документация по исправлению: https://bugs.eclipse.org/bugs/attachment.cgi?id=218320

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

-DtolerateIllegalAmbiguousVarargsInvocation=true

Ответ 3

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

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

to

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

тогда добавьте (true, this) не двусмысленно больше

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