Lombok @Getter и @Setter — больше не нужно писать геттеры и сеттеры

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

Следующая статья — «Lombok @ToString».
Предыдущая статья — «Lombok @Cleanup — автоматическое управление ресурами».

Вы можете добавить аннотацию @Getter и/или @Setter к любому полю, чтобы lombok автоматически сгенерировал методы получения и установки значения.
Метод получения значения по умолчанию просто возвращает значение поля и имеет имя getFoo, если поле имеет имя foo (или isFoo, если поле логического типа). Метод установки нового значения по умолчанию имеет имя setFoo, если поле имеет имя foo, возвращает void, и имеет один параметр с тем же типом, что и само поле. Этот метод просто устанавливает значение в поле.

Сгенерированные методы получения/установки значения имеют модификатор доступа public, если вы не укажете явно AccessLevel, как показано в примере ниже. Доступные уровни доступа: PUBLIC, PROTECTED, PACKAGE и PRIVATE.

Вы также можете указать аннотацию @Getter и/или @Setter для класса. В этом случае это будет так же, как будто вы указали эти аннотации для всех нестатических полей класса.

Вы можете также вручную запретить генерацию метода получения/установки для любого поля с помощью AccessLevel.NONE.  Это позволяет вам переопределить поведение аннотаций @Getter, @Setter или @Data для класса.

Чтобы добавить аннотации к сгенерированному методу, используйте onMethod=@__({@AnnotationsHere});. Чтобы добавить аннотации только к параметру сгенерированного метода установки значения, используйте  onParam=@__({@AnnotationsHere}). Но будьте осторожны! Это экспериментальная возможность.

НОВОЕ в v1.12.0: javadoc у поля теперь копируется на сгенерированные методы получения и установки значений. Обычно весь текст копируется, @return перемещается в метод получения значения, а строки @param перемещаются в метод установки значения. Перемещаются означает, что удаляются из JavaDoc поля. Также возможно определить уникальный текст для метода получения значения и метода установки значения. Для этого создайте секцию GETTER и/или SETTER. Секция — это линия в javadoc, содержащая два или более минуса (дефиса), затем текст «GETTER» или «SETTER», затем два или более минуса (дефиса) и больше ничего в линии.Если вы используете секции, то @return и @param больше не разделяются (переместите @return или @param внутрь секции).

С помощью Lombok

Чистая Java

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

Если установлен в true, то сгенерированные методы установки значения возвращают this (вместо void). Явно указанный параметр chain в аннотации @Accessors имеет приоритет перед этой настройкой.

 

Если установлено в true, то генерирует методы установки и получения значений без стандартных префиксов get и set, а вместо этого методы используют то же имя, что и поле. Явно указанный параметр fluent в @Accessors имеет приоритет над этой настройкой.

 

Это свойство-список. Значения могут быть добавлены с помощью оператора +=. Унаследованные префиксы из родительского файла конфигурации могут быть удалены с помощью оператора -=. Lombok разделяет любые подходящие префиксы от имени, для того чтобы определить имя сгенерированных методов получения/установки значений. Например, если m — это один из префиксов из этой настройки, то поле с именем mFoobar будет иметь метод установки значения getFoobar(), а не getMFoobar(). Явно указанный параметр prefix в @Accessors имеет приоритет перед этой настройкой.

 

Если установлено в true, то сгенерированные методы получения значений для логических полей будут использовать префикс get вместо префикса по умолчанию, и любой сгенерированный код, вызывающий методы получения значения, вроде @ToString, будет также использовать get вместо is.

 

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

 

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

 

Мелким шрифтом

Для генерации имён методов первый символ поля, если он в нижнем регистре, приводится к верхнему регистру, в противном случае он оставляется неизменным. Затем используются префиксы get/set/is.

Никакой метод не генерируется, если уже существует метод с таким же именем (не зависит от регистра) и тем же количеством параметров. Например, метод getFoo() не будет генерироваться, если уже существует метод getFoo(String… x), даже если технически возможно сделать такой метод. Это предостережение, для того чтобы предотвратить недоразумения. Если генерация метода пропущена по этой причине, то появляется предупреждение.  Вы можете пометить любой метод @lombok.experimental.Tolerate, чтобы скрыть их.

Для логических полей, начинающихся с is с последующим символов в верхнем регистре, префикс не используется для генерации имени метода получения значения.

Любые вариации логического типа не будут иметь префикс is вместо get. Например, возвращаемый тип java.lang.Boolean будет иметь префикс get, а не is.

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

Вы можете добавить аннотацию @Getter или @Setter к классу. Это эквивалентно добавлению этих аннотаций ко всем нестатическим полям класса. Аннотации @Getter/@Setter для полей имеют приоритет над аннотациями для классов.

Использование AccessLevel.NONE просто ничего не генерирует. Оно полезно только в комбинации с @Data для класса или для установленных для класса аннотаций @Getter или @Setter.

@Getter может также использоваться в перечислениях. @Setter — не может, но не по технической причине. Методы установки значений для перечислений — это очень экстремальная и плохая идея.

 

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

Следующая статья — «Lombok @ToString».
Предыдущая статья — «Lombok @Cleanup — автоматическое управление ресурами».

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

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