Я попытался просмотреть JEP-286 о локальном выводе типов. Я вижу, что это работает только для локальных переменных — понял. Так что это действительно работает:
public class TestClass {
public static void main(String [] args){
var list = new ArrayList<>();
list.add("1");
System.out.println(list.get(0)); // 1
}
}
Я вижу, что это, с другой стороны, не компилируется:
public class TestClass {
public var list = new ArrayList<>();
public static void main(String [] args){
}
}
Очевидно, что это не так, поскольку JEP так говорит. Теперь мой вопрос:
Логично, что член public/protected, объявленный как var
, потерпит неудачу, по крайней мере, IMO. Но почему он не компилируется, даже если это private
? Я могу только предположить, что вы все еще можете получить эту переменную с помощью отражения (и я не могу получить локальные поля, подобные этому)... И для получения этой переменной потребуется приведение, ну, возможно, очень запутанное приведение.
var
. Еще один хороший вопрос исходит от вас. :) - person Naman   schedule 05.03.2018