Ответ
var — это ключевое слово для объявления локальных переменных с выводом типа, добавленное в Java 10. Компилятор сам определяет тип переменной на основе инициализирующего выражения.
Структура объявления var:
var variableName = initializerExpression;
var— ключевое слово.variableName— имя переменной.=— оператор присваивания.initializerExpression— выражение, тип которого будет выведен для переменной.
Примеры:
var list = new ArrayList<String>(); // Тип: ArrayList<String>
var message = "Hello, World!"; // Тип: String
var stream = list.stream(); // Тип: Stream<String>
var entry = Map.entry("key", 42); // Тип: Map.Entry<String, Integer>
Важные ограничения и правила:
- Только для локальных переменных. Нельзя использовать для полей класса, параметров методов или возвращаемых типов.
- Обязательная инициализация.
var x;— ошибка компиляции. - Нельзя инициализировать
nullбез явного указания типа (например, через приведение). - Не является ключевым словом в стиле JavaScript. Тип выводится один раз при компиляции и не может быть изменен.
- Имя
varнельзя использовать как идентификатор.
Почему var? Уменьшает шаблонный код, улучшает читаемость при очевидных типах (например, с дженериками).
Ответ 18+ 🔞
А, ну вот, наконец-то до нас, джавистов, дошло, блядь! Сидели, смотрели на C#, на Kotlin, на всех этих выскочек, а сами с List<Map.Entry<String, List<Integer>>> в каждой строчке жили. Как будто без этого длиннющего пиздеца компилятор нихуя не понимал, что мы хотим.
Так вот, var — это, грубо говоря, волшебное слово «угадай сам». Ты говоришь компилятору: «Слушай, дружище, вот тут я создаю какую-то хуйню. Сам посмотри на правую часть от «равно» и сообрази, какого она типа. А я, ленивая жопа, писать это всё не буду».
Как это выглядит, блядь:
var list = new ArrayList<String>(); // И он понимает, что это ArrayList<String>, ёпта!
var message = "Hello, World!"; // О, боже, это же String! Ни хуя себе открытие!
var stream = list.stream(); // Stream<String>, Карл! Не надо мне это писать!
var entry = Map.entry("key", 42); // Map.Entry<String, Integer>... овердохуища букв сэкономил.
Но, как всегда, наша радость ограничена кучей правил, чтобы мы, дураки, себе ноги не прострелили. Запоминай:
- Только для своих, внутри методов. Это как домашние тапочки. Не выноси за порог. Нельзя воткнуть
varв поля класса, в аргументы метода или вместо возвращаемого типа. Только локальные переменные, сука! - Сразу говори, что даёшь.
var x;— это пиздец, а не объявление. Компилятор тебе: «Чё даёшь-то? Воздух?». Инициализация обязательна, прямо в этой же строчке. null— не аргумент.var shit = null;— не прокатит. Компилятор охуеет и спросит: «Аnullкакого, блядь, типа?». Придётся явно кастовать, если уж очень надо.- Это не JavaScript, ёпта! Тип выводится один раз и навсегда при компиляции.
var a = 10; a = "строка";— получишь пиздюлей от компилятора. Это не динамическая типизация, а просто сахар синтаксический. - Освободи имя. Теперь
var— слово зарезервированное. Не называй так свою переменную, класс или собаку.
А нахуя это всё? Да чтобы глаза не ебало, когда читаешь очевидные вещи! Особенно когда дженерики в дженериках, как матрёшки. Читабельность, блядь, повышается. Но злоупотреблять — себя не уважать. Если из правой части непонятно, что за тип, лучше написать явно, а то потом сам через месяц на свой код посмотришь и воскликнешь: «И чё это за var такой, блядь?».