Что делает var <T>в Java? - PullRequest
       42

Что делает var <T>в Java?

7 голосов
/ 21 февраля 2020

Мой друг заметил, что

var<Integer> list = new ArrayList<Double>();

действительно в Java. Оказывается, тип list оценивается как ArrayList<Double>.

При использовании var<Integer> list = new ArrayList<>();, list - это просто ArrayList<Object>.

Мы оба не смогли выяснить, что делает тип c generic var, как кажется, игнорируется. Но если так, то почему это вообще синтаксически правильно?

Ответы [ 2 ]

7 голосов
/ 21 февраля 2020

Как оказалось, использование var<T> разрешено только в Eclipse с ядром JDT, javac не принимает это. Поэтому я предполагаю, что это ошибка в Eclipse.

РЕДАКТИРОВАТЬ: Как показал @ M C Emperor, это определенно ошибка. Я добавил эту ошибку в Eclipse Bugzilla.

3 голосов
/ 06 мая 2020

Это действительно ошибка, но доказательство находится в спецификации языка Java § 14.4 Заявления о декларации локальной переменной :

LocalVariableType:
    UnannType
    var

Ad you Как видите, ограниченный идентификатор var указан без какого-либо другого токена. Кроме того, UnannType в конечном итоге преобразуется в токен TypeIdentifier, который явно запрещает var.

Так что нет, var<Integer> является не действительным.

...