ブール値フィールドにLombokの@Getterを使用する

ブール値フィールドにLombokの@Getterを使用する

1. 前書き

Project Lombokは、Javaの定型文を減らすための一般的なライブラリです。

このクイックチュートリアルでは、対応するゲッターメソッドを作成する必要をなくすために、Lombokの@Getterアノテーションがブールフィールドでどのように機能するかを見ていきます。

2. メーベン依存

pom.xmlProject Lombokを追加することから始めましょう。


    org.projectlombok
    lombok
    1.18.2

3. booleanフィールドで@Getterを使用する

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;

LombokがisIsRunningというメソッドを作成した場合、少し面倒になります。

代わりに、Lombokは以前のようにisRunningを作成します。

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

3.2. 同じアクセサ名を持つ2つのbooleanフィールド

競合が発生する場合があります。

同じクラスに次の行が必要だとします。

    @Getter
    public boolean running = true;

    @Getter
    public boolean isRunning = false;

このような混乱を招く命名規則を避けるべき多くの理由があります。 それらの1つは、ロンボクの競合を作成することです。

Lombokの規則を使用すると、これら2つのフィールドのアクセサメソッド名は同じになります:isRunning。 ただし、同じクラスに同じ名前の2つのメソッドがあると、コンパイラエラーが発生します。

Lombokは、アクセサメソッドを1つだけ作成し、この場合、フィールド宣言の順序に基づいてrunning, を指すようにすることで、これを解決します。

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

4. Booleanフィールドで@Getterを使用する

現在、LombokはBoolean typeを少し異なる方法で処理します。

もう一度同じ実行例を試してみましょう。ただし、プリミティブ型の代わりに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を確認してください。