Ответ
Да, поддерживает. Ключевое слово var для вывода типа локальных переменных было добавлено в Java 10 и доступно во всех последующих версиях, включая Java 17.
Назначение: var позволяет объявить локальную переменную без явного указания типа, который компилятор выводит из инициализатора.
Примеры использования:
var list = new ArrayList<String>(); // Тип: ArrayList<String>
var message = "Hello, Java 17!"; // Тип: String
var stream = list.stream(); // Тип: Stream<String>
Важные ограничения (что НЕЛЬЗЯ делать с var):
- Только для локальных переменных: Нельзя использовать для полей класса, параметров методов или возвращаемых типов.
- Обязательная инициализация:
var x;— ошибка компиляции. - Нельзя инициализировать null:
var y = null;— ошибка (неоднозначный тип). - Не для лямбда-параметров:
(var a, var b) -> a + b— допустимо только с явным типом-интерфейсом.
Важно: var не делает Java динамически типизированной. Тип определяется при компиляции и не может быть изменен.
Ответ 18+ 🔞
О, смотри-ка, какой вопрос подъехал! Ну что ж, давай разберём эту историю про var, а то народ, бывает, путается, как хуй с пальто.
Вот смотри, чтобы не было как у того немого Герасима, который только «Му-му» мычит, а нихуя не может объяснить. Так и с var — штука мощная, но если без мозгов применять, получится пиздопроебибна.
Короче, да, в Java 17 var работает, как швейцарские часы. Подвезли эту радость ещё в десятой версии, и с тех пор живёт, не тужит. Суть в чём? А суть, блядь, в том, чтобы не писать очевидные типы, которые компилятор и так видит, как свои пять пальцев.
Вот смотри, раньше ты бы написал:
ArrayList<String> list = new ArrayList<String>();
А теперь можно, блядь, короче:
var list = new ArrayList<String>(); // И компилятор сам смекнёт, что это ArrayList<String>, ёпта!
Или вот:
var message = "Привет, ядрёна вошь!"; // Тип String, даже ребёнку понятно.
var stream = list.stream(); // Stream<String>, ебушки-воробушки!
Но! — и вот тут внимание, а то подозрение ебать чувствую, что народ начнёт выёбываться. var — это не волшебная палочка, а инструмент, и есть правила, нарушишь — получишь компилятор по ебалу.
- Только для своих, локальных. Нельзя воткнуть
varв объявление поля класса, в параметры метода или как возвращаемый тип. Это исключительно для переменных внутри методов, и всё! Попробуешь — получишь «вротберунчик» от компилятора. - Сразу инициализируй, блядь.
var x;— это ошибка, чувак. Компилятор не экстрасенс, он должен сразу понять, о каком типе речь. Без инициализатора — ни хуя не выйдет. - Null — не аргумент.
var y = null;— это пиздец. Тип какой? String? Object? Кот сука собака? Неоднозначно! Компилятор скажет: «Иди нахуй, определись». - С лямбдами — осторожно.
(var a, var b) -> a + b— так, внатуре, можно, но только если тип лямбды и так ясен из контекста. А так — лучше явно указать, а то на ровном месте запутаешься.
И главное, запомни раз и нахуй: var НЕ делает Java языком с утками и динамической типизацией. Это просто синтаксический сахар, ёпта! Тип вычисляется один раз при компиляции и намертво вшивается в байт-код. Менять его потом — хуй тебе, а не смена типа.
Так что используй с умом, не будь распиздяем. А то начнёшь везде var пихать, получишь код, который через месяц сам не разберёшь — и волнение ебать, и терпения ноль ебать. Всё должно быть читаемо, а не просто коротко.