Использование var в джаве
Что не так с выведением типов var
в джаве? Коллега спросил, для чего я часто использую var
, и не отголоски ли это джаваскрипта с динамической типизацией.
А у меня это отголоски выведения типов auto
в C++. Стоит ли на проектах с джавой использовать var
вместо явного указания типов? В чем плюсы и минусы? Вы используете var
?
Ответы (2 шт):
Компилятор выводит тип на основе значения, которое присваивают переменной. Но этим не стоит злоупотреблять.
Случаи, в которых, можно уместно использовать var:
Можно легко определить тип переменной, посмотрев, на присваиваемое значение:
var stream = url.getInputStream(); var name = person.getFullName();
Тип переменной не важен для понимания кода:
for(var tmp : list) System.out.println(tmp);
Чтобы понять var
, предлагаю вспомнить что-нибудь похожее — например, вывод типа (англ. type inference), который появился в 7 Jav'е:
SomeGenericClass<Integer> = new SomeGenericClass<>();
Это же никакая не динамическая типизация, верно? Тип во вторых угловых скобках очевиден. И поэтому его не надо указывать дважды.
При создании объектов тип пишется тоже два раза. И если название класса длинное, то это может быть неудобно:
JFormattedTextField textField = new JFormattedTextField();
Поэтому первое объявление типа можно заменить на var
(если это локальная переменная, конечно!). И получится кратко и понятно:
var textField = new JFormattedTextField();
Компилятор прекрасно поймёт, что должно быть вместо var
.
Но тут главное не переусердствовать с новинкой и не понаписать непонятных var
'ов. Антипример:
//comboBox = javax.swing.JComboBox
var item = comboBox.getItemAt(3);
В качестве item'а может быть вообще что угодно, класс JComboBox
параметризованный, а метод getItemAt()
возвращает E
. Придётся смотреть, как этот объект был объявлен, с каким типом данных он работает...