Использование Lombok’s @Getter для логических полей

Использование Lombok's @Getter для логических полей

1. Вступление

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

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

2. Maven Dependency

Начнем с добавленияProject Lombok к нашемуpom.xml:


    org.projectlombok
    lombok
    1.18.2

3. Использование @Getter в полеboolean

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

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

@Getter
private boolean running;

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

И теперь мы можем обратиться к нему, даже если сами не написали метод:

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

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

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

@Getter
private boolean isRunning = true;

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

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

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

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

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

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

    @Getter
    public boolean running = true;

    @Getter
    public boolean isRunning = false;

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

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

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

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

4. Использование @Getter в полеBoolean

Теперь Lombok немного по-другому относится к стипуBoolean .

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

@Getter
private Boolean running;

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

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

5. Заключение

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

И не забудьте проверить образцыover on Github.