Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@nimzo6689

Lombokをいざ使おうとしたときに確認するメモ

More than 3 years have passed since last update.

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, など。

参考

Lombok 使い方メモ
JavaでIDEのアクセッサ生成よりlombokを使ったほうがいい理由

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nimzo6689
仕事は JavaEE 周辺。 Qiita の PowerShell 部門で 9 位。
jcsc
「未知なる可能性への挑戦」がモットー。愛媛生まれのエンジニア集団。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?