2013-02-12 3 views
5

Я только что перешел от JDK1.6 к JDK 1.7.Предупреждение Eclipse: непроверенное преобразование против избыточной спецификации аргументов типа

У меня есть этот код:

SomeClass<SomeType> someVariable = new SomeClass<SomeType>(createSomeObject()); 

Теперь я получаю предупреждение:

Redundant specification of type arguments <SomeType> 

Если я использую быстрое решение Eclipse, дает мне это:

SomeClass<SomeType> someVariable = new SomeClass<>(createSomeObject()); 

Какие результаты в

Got an exception - expecting EOF, found 'xyz' 

xyz - следующий элемент в тексте кода.

Когда я извлекаю угловые скобки, я получаю это предупреждение:

SomeClass is a raw type. References to generic type SomeClass<M> should be parameterized 

Если добавить параметр типа I в конечном итоге с первого предупреждения (избыточные спецификации ...)

WTF собирается на?

Я хочу сохранить оба предупреждения, и я все еще использую Eclipse 3.7.1. Я не хочу обновлять свой Eclipse, если есть другой способ решить эту проблему, так как мне потребуется некоторое время, чтобы настроить его так, как я хочу его снова.

+0

Проверьте настройку Eclipse Java «скомпилировать до версии». Это может по-прежнему устанавливаться в 1,6, а не 7 –

+0

@MrSpoon. Вы имеете в виду «уровень соответствия компилятора» в разделе «Настройки-Компилятор-JDK Compliance»? Это значение равно 1.7. – Torsten

+0

Да, этот. Это позор. Ошибка «Got exception» не похожа на стандартную ошибку компилятора. Итак, я думаю, что это происходит от другого застройщика Eclipse. Какие еще разработчики вы включили в «Проект/Свойства/Строители»? –

ответ

3

избыточностью спецификация аргументов типа <SomeType>

происходит от Java 7-х type inference mechanism. Определение общего типа дважды действительно излишним, так как компилятор может интуитивно, что вам нужно просто из

SomeClass<SomeType> someVariable = new SomeClass<>(createSomeObject()); 

и, следовательно, вам не нужно общего типа как в декларации и определения (умозаключения типа может идти дальше - например, с помощью Scala вы просто объявляете LHS как val или var, а компилятор знает, какой тип он действительно должен быть).

+0

Отлично, но есть ли способ сказать MapStruct для создания правильного кода Java 8? – Sebien

Смежные вопросы