Lombok @Data

Цикл статей «Project Lombok».

Следующая статья — «Lombok @Value — лёгкое создание неизменяемых классов».
Предыдущая статья — «Lombok @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor».

@Data — это удобная сокращённая аннотация, которая содержит в себе возможности из @ToString, @EqualsAndHashCode, @Getter / @Setter и @RequiredArgsConstructor. Другими словами, @Data генерирует весь бойлерплейт код, который обычно связан с обычными POJO (Plain Old Java Objects) и бинами: методы получения значений для всех полей, методы установки значений для не final полей, подходящий toString, equals и hashCode для этих полей, конструктор, инициализирующий все final поля и все не final поля, у которых нет выражения инициализации, и которые помечены @NonNull, для того чтобы гарантировать, что поле никогда не будет null.

@Data — это всё равно, что иметь неявные @Getter, @Setter, @ToString, @EqualsAndHashCode и @RequiredArgsConstructor для класса (с исключением что никаких конструкторов не генерируется, если уже есть явно написанный конструктор). Однако параметры этих аннотаций (callSuper, includeFieldNames и exclude) не могут быть установлены с @Data. Если вам нужно установить значение этих параметров отличное от значения по умолчанию, то просто явно добавьте эти аннотации. @Data достаточно умён, чтобы учитывать их.

Все сгенерированные методы получения значений и установки значений будут с модификатором доступа public. Чтобы переопределить уровень доступа, добавьте @Getter, @Setter к полю или классу. Вы можете также использовать эти аннотации (комбинируя их с AccessLevel.NONE), чтобы подавить генерацию методов установки значений и/или методов получения значений.

Все поля помеченные как transient не будут рассматриваться в hashCode и equals. Все статические поля будут пропускаться полностью (не рассматриваются любыми сгенерированными методами, и для них не будет сгенерировано методов получения/установки значений).

Если класс уже содержит метод с таким же именем и количеством параметров, как метод, который должен быть сгенерирован, то метод не генерируется, и ошибок и предупреждений не возникает. Например, если уже есть метод с сигнатурой equals(AnyType param), то метод equals не будет сгенерирован, несмотря на то что технически это может быть совершенно другой метод, так как у него другой тип параметра. То же правило применяется для конструктора (при наличии явного конструктора @Data не генерирует конструкторов), так же как и для toString, equals, методов получения значений, методов установки значений. Вы можете пометить любой конструктор или метод @lombok.experimental.Tolerate, чтобы скрыть его от Lombok.

@Data может обрабатывать шаблонные параметры для полей. Для того чтобы уменьшить бойлерплейт-код при создании объектов для классов с шаблонами, вы можете использовать параметр staticConstructor, чтобы сгенерировать приватный конструктор, а также статический метод, возвращающий новый экземпляр. В этом случае javac будет выводить тип переменной. Таким образом, с объявлением класса @Data(staticConstructor="of") class Foo { private T x;}, вы можете создавать экземпляры класса Foo так: Foo.of(5);, вместо new Foo(5);.

С помощью Lombok

Чистая Java

Поддерживаемые ключи конфигурации

Lombok будет помечать любое использование @Data предупреждением или ошибкой, если настроено.

Примечание

Смотрите примечания к @ToString, @EqualsAndHashCode, @Getter / @Setter и @RequiredArgsConstructor.

Любые аннотации с именем @NonNull (нечувствительно к регистру) для поля расцениваются как то, что это поле никогда не должно содержать null. Поэтому эти аннотации приведут к проверке на null в сгенерированном конструкторе для этих полей. Также эти аннотации (как и все аннотации с именем @Nullable) копируются к параметру конструктора, настоящему или статическому. Те же принципы применяются к сгенерированным методам получения значений и установки значений (смотрите статьи про @Getter / @Setter)

По умолчанию любые переменные, начинающиеся с символа «$», исключаются автоматически. Вы можете включить их с помощью явных аннотаций (@Getter или @ToString, например) или с помощью параметра of.

 

Цикл статей «Project Lombok».

Следующая статья — «Lombok @Value — лёгкое создание неизменяемых классов».
Предыдущая статья — «Lombok @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor».

Один комментарий к “Lombok @Data”

  1. «Lombok будет помечать любое использование @Data предупреждением или ошибкой, если настроено.» — если настроено что? …………..

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *