0Pricing
Java Academy · Урок

Ограничения 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 — локальная установка не требуется.

Все уроки этого курса

  1. Использование var для локальных переменных
  2. Когда var повышает читаемость
  3. var в циклах for
  4. Ограничения var
← Назад к Java Academy