РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
72 of 1163 menu

Компактный конструктор record

Компактный конструктор record используется внутри объявления записи для выполнения проверок, нормализации или вычислений над компонентами до их присваивания полям. Его главная особенность в том, что в заголовке конструктора не указываются параметры - они автоматически совпадают с компонентами записи. В теле компактного конструктора доступны имена этих компонентов как локальные переменные, а в конце компилятор сам добавляет присваивание this.component = component для каждого компонента. Если нужно изменить значение компонента перед сохранением, переменной с именем компонента можно присвоить новое значение.

Синтаксис

public record Name(Type component1, Type component2) { public Name { // checks and normalization // optional reassignment of component variables } }

Пример

Давайте создадим запись Point с компактным конструктором, который проверяет, что координаты неотрицательны:

public class Main { public record Point(int x, int y) { public Point { if (x < 0 || y < 0) { throw new IllegalArgumentException("negative"); } } } public static void main(String[] args) { Point p = new Point(2, 3); System.out.println(p); } }

Результат выполнения кода:

Point[x=2, y=3]

Пример

Давайте в компактном конструкторе нормализуем строку, приводя её к нижнему регистру и обрезая пробелы:

public class Main { public record User(String name) { public User { name = name.trim().toLowerCase(); } } public static void main(String[] args) { User u = new User(" ABCDE "); System.out.println(u); } }

Результат выполнения кода:

User[name=abcde]

Пример

Давайте создадим запись Range, в компактном конструкторе которой меняем местами границы, если начало больше конца:

public class Main { public record Range(int from, int to) { public Range { if (from > to) { int temp = from; from = to; to = temp; } } } public static void main(String[] args) { Range r = new Range(5, 1); System.out.println(r); } }

Результат выполнения кода:

Range[from=1, to=5]

Смотрите также

  • ключевое слово record,
    которое объявляет запись
  • понятие компонент записи,
    который задаёт поле и аксессор
  • обычный конструктор,
    который явно принимает параметры
  • ключевое слово this,
    которое ссылается на текущий объект
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить