ブールフィールドにLombokの@Getterを使用する
1. 序章
Project Lombok は、Javaボイラープレートを削減するための一般的なライブラリです。
このクイックチュートリアルでは、Lombokの @Getter アノテーションがブールフィールドでどのように機能し、対応するゲッターメソッドを作成する必要がないかを見ていきます。
2. Mavenの依存関係
ProjectLombokをpom.xmlに追加することから始めましょう。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
3. booleanフィールドでの@Getterの使用
Lombokにプライベートブールフィールドのアクセサーメソッドを生成させたいとしましょう。
そのフィールドに@Getterで注釈を付けることができます。
@Getter
private boolean running;
また、Lombokはアノテーションプロセッサを使用して、クラスに 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つだけ作成し、この場合、フィールド宣言の順序に基づいて実行中、にポイントすることでこれを解決します。
@Test
public void whenTwoBooleanFieldsCauseNamingConflict_thenLombokMapsToFirstDeclaredField() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.isRunning() == lombokExamples.running);
assertFalse(lombokExamples.isRunning() == lombokExamples.isRunning);
}
4. ブールフィールドでの@Getterの使用
現在、Lombokはブールタイプを少し異なる方法で処理します。
最後に同じ実行例を試してみましょう。ただし、プリミティブ型の代わりにブール値を使用します。
@Getter
private Boolean running;
isRunning を作成する代わりに、LombokはgetRunningを生成します。
@Test
public void whenFieldOfBooleanType_thenLombokPrefixesMethodWithGetInsteadOfIs() {
LombokExamples lombokExamples = new LombokExamples();
assertTrue(lombokExamples.getRunning());
}
5. 結論
この記事では、ブールプリミティブとブールオブジェクトにLombokの@Getterアノテーションを使用する方法について説明しました。
また、Githubでサンプルを確認してください。