2015-07-10 4 views
4

Когда мне нужно создать ArrayList, который необходимо хранить строки, я делаю это -Java Generic использования формат

ArrayList<String> whatwhat = new ArrayList<String>(); 

В затмении, когда я опускаю слева или справа выше заявление, я получаю предупреждение , Что подводит меня к моему вопросу, почему Java требует/разрешает это? Разве мы не должны указывать общий тип только один, с одной стороны?

+0

, если вы хотите знать, логически рассуждать, почему, читайте мой ответ. –

ответ

4

С Java 6 и ранее требуется то, что вы набрали с обеих сторон.

Однако starting with Java 7, you can use the "diamond operator", пустые угловые скобки <>, с правой стороны, а компилятор выберет тип, основанный на параметре типа слева.

ArrayList<String> whatwhat = new ArrayList<>(); // Java 7+ 
+0

Спасибо! Возможно, для Eclipse нужна порка. –

+0

Собственно, я забираю это назад о затмении. Использование оператора алмаза справа не вызовет предупреждений о затмении. Хорошая вещь! –

0

Ну нет. Смотрите, что с левой стороны вы используете общий тип ArrayList, где с правой стороны вы используете необработанный тип ArrayList(); , Вы можете добавить whatwhat.add («new :)», а Java автоматически деформирует «новый» в новую строку. Это называется autoboxing. В то время как кастинг не нужен для извлечения значения из списка с указанным типом элемента, поскольку компилятор уже знает тип элемента. причина вы получаете сообщение об ошибке, когда вы не на праве, потому, что он должен

ArrayList<String> whatwhat = new ArrayList<>(); ... // some list that contains some strings 
ArrayList<String> whatwhat = new ArrayList<String>(); ... // Legal since you used the raw type and lost all type checking 
+0

На самом деле я не получаю сообщение об ошибке. Это просто предупреждение IDE относительно правильного использования Generics. Как только я использовал оператора алмаза справа, он исправляет и мои проблемы, которые повторяют общее определение и предупреждение IDE. –

+0

Да, это не дало бы ошибку в любом случае. Я просто объяснял предупреждение. –

1

Как вы можете видеть, что нет никакой ошибки, так что вы можете быть уверены, что это разрешено javac.Теперь вы получаете предупреждение, так что это связано с функцией, предоставляемой Eclipse.

Фактически Eclipse предоставляет такие функции для предупреждения (или предоставления ошибок, если dev сконфигурировал Eclipse для то же самое), что yo u используют старые соглашения и должны обновляться.

Для решения:
Вы можете изменить настройки, как показано ниже Eclipse, и ваше предупреждение должно исчезнуть.

enter image description here