Является ли 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, это прекрасно... Кто-нибудь знает об этом?
Ответы
Ответ 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