Поддерживает ли Java 17 ключевое слово var?

Ответ

Да, поддерживает. Ключевое слово 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):

  1. Только для локальных переменных: Нельзя использовать для полей класса, параметров методов или возвращаемых типов.
  2. Обязательная инициализация: var x; — ошибка компиляции.
  3. Нельзя инициализировать null: var y = null; — ошибка (неоднозначный тип).
  4. Не для лямбда-параметров: (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 — это не волшебная палочка, а инструмент, и есть правила, нарушишь — получишь компилятор по ебалу.

  1. Только для своих, локальных. Нельзя воткнуть var в объявление поля класса, в параметры метода или как возвращаемый тип. Это исключительно для переменных внутри методов, и всё! Попробуешь — получишь «вротберунчик» от компилятора.
  2. Сразу инициализируй, блядь. var x; — это ошибка, чувак. Компилятор не экстрасенс, он должен сразу понять, о каком типе речь. Без инициализатора — ни хуя не выйдет.
  3. Null — не аргумент. var y = null; — это пиздец. Тип какой? String? Object? Кот сука собака? Неоднозначно! Компилятор скажет: «Иди нахуй, определись».
  4. С лямбдами — осторожно. (var a, var b) -> a + b — так, внатуре, можно, но только если тип лямбды и так ясен из контекста. А так — лучше явно указать, а то на ровном месте запутаешься.

И главное, запомни раз и нахуй: var НЕ делает Java языком с утками и динамической типизацией. Это просто синтаксический сахар, ёпта! Тип вычисляется один раз при компиляции и намертво вшивается в байт-код. Менять его потом — хуй тебе, а не смена типа.

Так что используй с умом, не будь распиздяем. А то начнёшь везде var пихать, получишь код, который через месяц сам не разберёшь — и волнение ебать, и терпения ноль ебать. Всё должно быть читаемо, а не просто коротко.