Перейти к основному содержимому

Как использовать Lombok @Getter для Boolean полей в Java?

· 3 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Введение

Project Lombok — популярная библиотека для сокращения шаблонов Java.

В этом кратком руководстве мы рассмотрим, как аннотация Lombok @Getter работает с логическими полями, чтобы избавиться от необходимости создавать соответствующие методы получения.

2. Зависимость от Maven

Давайте начнем с добавления Project Lombok в наш pom.xml :

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>

3. Использование @Getter для логического поля

Допустим, мы хотим, чтобы Lombok сгенерировал метод доступа для нашего частного логического поля.

Мы можем аннотировать это поле с помощью @Getter :

@Getter
private boolean running;

И Lombok будет использовать свой процессор аннотаций для создания метода isRunning() в классе.

И теперь мы можем сослаться на него, хотя сами не написали метод:

@Test
public void whenBasicBooleanField_thenMethodNamePrefixedWithIsFollowedByFieldName() {
LombokExamples lombokExamples = new LombokExamples();
assertFalse(lombokExamples.isRunning());
}

3.1. Логическое поле, имеющее то же имя, что и его метод доступа

Давайте добавим еще одну строку кода, чтобы сделать пример немного сложнее:

@Getter
private boolean isRunning = true;

Было бы немного громоздко, если бы Ломбок создал метод с именем isIsRunning .

Вместо этого Lombok создает isRunning , как и раньше:

@Test
public void whenBooleanFieldPrefixedWithIs_thenMethodNameIsSameAsFieldName() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.isRunning());
}

3.2. Два логических поля с одинаковым именем доступа

Иногда могут возникать конфликты.

Допустим, нам нужно иметь следующие строки в одном классе:

@Getter
public boolean running = true;

@Getter
public boolean isRunning = false;

Есть много причин, по которым нам следует избегать такого запутанного соглашения об именах. Одна из них заключается в том, что это создает конфликт для Ломбока.

Согласно соглашению Ломбока, эти два поля будут иметь одно и то же имя метода доступа: isRunning . Но наличие двух методов с одинаковыми именами в одном классе вызовет ошибку компилятора.

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

@Test
public void whenTwoBooleanFieldsCauseNamingConflict_thenLombokMapsToFirstDeclaredField() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.isRunning() == lombokExamples.running);
assertFalse(lombokExamples.isRunning() == lombokExamples.isRunning);
}

4. Использование @Getter в логическом поле

Теперь Ломбок обращается с логическим типом немного по-другому.

Давайте в последний раз попробуем наш тот же работающий пример, но с логическим значением вместо примитивного типа:

@Getter
private Boolean running;

Вместо создания isRunning Lombok сгенерирует getRunning :

@Test
public void whenFieldOfBooleanType_thenLombokPrefixesMethodWithGetInsteadOfIs() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.getRunning());
}

5. Вывод

В этой статье мы рассмотрели, как использовать аннотацию Lombok @Getter для логических примитивов и логических объектов.

И обязательно ознакомьтесь с примерами на Github .