Lombokについて、いろいろまとめてみました。
プロジェクトで採用する際の参考になるかもです。
Lombokについて簡単に説明
Lombok(ロンボク。ロンボックでも可)とは、
Java特有の冗長なコード(ボイラープレートコード)を簡潔にしてくれるオープンソースのライブラリです。
アノテーションを付けるだけで、 getter, setter, toString, equals など
「何度も繰り返し書くコード」をコンパイル時に自動生成してくれます。
メリット
- ボイラープレートコードをコード上から排除できる。
- フィールド名変更の際にアクセサメソッドが古いままにならない。
- アクセサメソッド内のロジックが埋もれない。
- テストのカバレッジで適正な値が出やすい。
デメリット(注意事項)
-
@ToString
で循環参照になる危険性がある。
→その場合、excludeで除外設定できる。
詳しくはこちらを参照 → Lombok利用時のStackOverflow - toStringメソッド - フィールド名を変更する際、アクセサメソッドの参照先が変更できない。
→IDEのGetter/Setterの自動生成したものからリファクタリング機能で変更するなどの対応が必要。
インストール方法
Eclipse:
以下のサイトからlombok.jarをダウンロードして実行。
https://projectlombok.org/download.html
Specify Locationでeclipse.exeと同じディレクトリを指定して、Install/Updateする。
NetBeans:
※NetBeansの場合は、jarとか何も操作しなくてもMavenとか使えば、普通に使用できる。
以下、Mavenの書き方。
※scopeをprovidedとすること。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
<scope>provided</scope>
</dependency>
コーディング規約
Lombokはその性質上、これまでのコーディング感を一変させることが考えられるため、
プロジェクトで使用する際は、コーディング規約を用いたほうがよいでしょう。
以下、使用可能とするアノテーション、および、クラスを記載します。
※あくまで、私の好みですので、参考までに。
動的型付け
val list = new ArrayList<String>(); //不変的なローカル変数
※ArrayListオブジェクトを代入した場合、List型ではなく、ArrayList型扱いとなる。
※右辺の型情報を省略した場合は、Listになる。
データモデル関連
@Getter, @Setter, @ToString, @EqualsAndHashCode, @Data, @Value
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
※アノテーションの引数として、AccessLevel, lazy, exclude, staticName="of"を使用可能とする。
オブジェクト生成関連
@Builder, @Singular, @NonNull, @Wither, @CleanUp
※Builderの場合、生成するクラス名とインスタンスを返す静的メソッド名の名前を変更できたりするが、
原則、その設定は行わないこととする。
※CleanUpはtry-with-resouces文を優先的に使用すると、ほとんどの場合は不要だが、
まだClosableを実装していないものはあるので、そのケースが出てきた場合に限り使用できることとする。
その他
@Synchronized, @Log4j2, @SneakyThrows
※SneakyThrowsを使用する場合は、非検査例外とする対象のThrowableを指定すること。
使用禁止
lombok.experimentalパッケージ配下
→実験的な機能が多く、今後仕様変更が入る可能性が十分に高いため。
例)Accessors(fluent = true), UtilityClass, など。