Ограничения var
Где нельзя использовать var
«Ограничения var» — бесплатный урок Java Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
У var есть правила
var удобен, но имеет ограничения. Он работает только для локальных переменных с инициализатором. Знание случаев, когда его использовать нельзя, поможет избежать неприятных ошибок компиляции.
Только локальные переменные
var разрешён только для локальных переменных (внутри методов, циклов и т. д.). Пример ниже корректен, поскольку переменная является локальной.
public class Main {
public static void main(String[] args) {
var greeting = "OK for locals";
System.out.println(greeting);
}
}Не для полей
Нельзя использовать var для полей класса. Для полей необходимо явно объявлять тип. Здесь count — обычное поле.
public class Main {
static int count = 0;
public static void main(String[] args) {
count = 5;
System.out.println(count);
}
}Не для параметров методов
Для параметров методов необходимо явно указывать типы. var нельзя использовать в списке параметров, поэтому этот метод напрямую объявляет параметр String name.
public class Main {
static void greet(String name) {
System.out.println("Hi " + name);
}
public static void main(String[] args) {
greet("Lee");
}
}Не для возвращаемых типов
Возвращаемым типом метода не может быть var — его необходимо указывать явно. Компилятор не выводит возвращаемые типы.
public class Main {
static int square(int x) {
return x * x;
}
public static void main(String[] args) {
System.out.println(square(6));
}
}Нужен инициализатор
Нельзя написать var x; без значения. Без инициализатора компилятору не из чего выводить тип. Всегда присваивайте значение сразу.
public class Main {
public static void main(String[] args) {
var ready = true;
System.out.println(ready);
}
}Инициализатор не может быть null
Конструкция var x = null; приводит к ошибке, поскольку у null нет конкретного типа. Вместо этого укажите типизированное значение, например пустую строку.
public class Main {
public static void main(String[] args) {
var text = "";
text = "now has a value";
System.out.println(text);
}
}Сокращённая запись инициализатора массива недопустима
Нельзя написать var nums = {1, 2, 3};. Сокращённая запись с фигурными скобками требует объявленного типа массива. Вместо этого используйте new int[]{...}.
public class Main {
public static void main(String[] args) {
var nums = new int[]{1, 2, 3};
System.out.println(nums.length);
}
}Это не зарезервированное слово
Интересно, что var — это зарезервированное имя типа, а не ключевое слово. По-прежнему нельзя назвать класс var, но это ограничение имеет узкую область действия. На практике рассматривайте var как часть современного синтаксиса.
public class Main {
public static void main(String[] args) {
var var2 = "identifiers can contain var";
System.out.println(var2);
}
}Лямбда-выражению нужен целевой тип
Нельзя присвоить голое лямбда-выражение переменной var, поскольку лямбда-выражению нужен целевой тип функционального интерфейса, из которого можно вывести тип. Явно укажите тип интерфейса.
import java.util.function.IntUnaryOperator;
public class Main {
public static void main(String[] args) {
IntUnaryOperator doubler = x -> x * 2;
System.out.println(doubler.applyAsInt(21));
}
}Итоги ограничений
Запомните ограничения: только локальные переменные, обязательная инициализация, без null, без голого лямбда-выражения, без сокращённой записи массива с фигурными скобками, а также не для полей, параметров и возвращаемых типов.
public class Main {
public static void main(String[] args) {
var ok = 42;
System.out.println("var is for locals: " + ok);
}
}Быстрая проверка
Какой из следующих вариантов является корректным использованием var?
Повторение
Вы узнали об ограничениях var:
- Разрешён только для локальных переменных с инициализатором
- Не используется для полей, параметров и возвращаемых типов
- Нельзя вывести тип из
nullили голого лямбда-выражения - Сокращённая запись массива с фигурными скобками недопустима
- Это зарезервированное имя типа, а не ключевое слово
Часто задаваемые вопросы
Урок «Ограничения var» бесплатный?
Да — полный текст урока «Ограничения var» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ограничения var»?
Где нельзя использовать var Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Ограничения var»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Использование var для локальных переменных
- Когда var повышает читаемость
- var в циклах for
- Ограничения var