Lombok ライブラリ
概要
Javaでは、クラスにフィールドを追加することによって、
既存のロジックに影響が出たり、新しく追加する必要があるメソッドが存在する。
また、これらはフィールドが増えるごとにコードの大部分を占めるようになるにも関わらず、
実装は極めて機械的であり、そのロジックはクラスにとって本質的でないことが多い。
このようなコードをボイラープレートコードという。
今回は、アノテーション記述によって、ボイラープレートコードを自動生成する
Javaライブラリの Lombok を調査してみた。
導入
インストール
個人的に分かりやすかったのは、以下のサイト。
【Java】Lombokで冗長コードを削減しよう | キャスレーコンサルティング 技術ブログ
なお、lombok.jar を Eclipse へのインストールを実行した後は、
eclipse.ini に以下2行が入っているか確認した方が良い。
=============================
-javaagent:lombok.jar
-Xbootclasspath/a:lombok.jar
=============================
私が起動したときは、-Xbootclasspath/a:lombok.jar が記述されて
いなかったため、動かなかった。(Eclipseバージョン: Mars.1 Release (4.5.1))
導入効果
可読性向上
ボイラープレートコードが減ることによって、コードの記述量がはっきりと減る。
同時に、本質的なコードが大部分を占めるようになるため、コードが分かりやすくなる。
導入例
Before
public class Book { private String id; private String title; private String author; private int page; public Book(String id, String title, String author, int page) { this.id = id; this.title = title; this.author = author; this.page = page; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } }
After
import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class Book { private String id; private String title; private String author; private int page; }
Use Case
public class Main { public static void main(String[] args) { Book book1 = new Book("10", "EFFECTIVE JAVA 第2版", "Joshua Bloch", 327); Book book2 = new Book("10", "EFFECTIVE JAVA 第2版", "Joshua Bloch", 327); Book book3 = new Book("15", "星の王子さま", "サン=テグジュペリ", 245); Book book4 = new Book("15", "星の王子さま", "サン=テグジュペリ", 246); // toStringメソッド System.out.println(book1); // equalsメソッド System.out.println("book1.equals(book2): " + book1.equals(book2)); System.out.println("book1.equals(book3): " + book1.equals(book3)); System.out.println("book3.equals(book4): " + book3.equals(book4)); // hashCodeメソッド System.out.println("book1 hash:" + book1.hashCode() + ", book2 hash: " + book2.hashCode()); System.out.println("book1 hash:" + book1.hashCode() + ", book3 hash: " + book3.hashCode()); System.out.println("book3 hash:" + book3.hashCode() + ", book4 hash: " + book4.hashCode()); } }
Console Output
Book(id=10, title=EFFECTIVE JAVA 第2版, author=Joshua Bloch, page=327) book1.equals(book2): true book1.equals(book3): false book3.equals(book4): false book1 hash:712838778, book2 hash: 712838778 book1 hash:712838778, book3 hash: 1107997353 book3 hash:1107997353, book4 hash: 1107997354
Lombok ライブラリ
この他、どのような記述が可能か本家(Lombok)で調査。
(記事執筆時のバージョン :v1.16.6)
規模が大きくなったため、別ページに分割記述。
Lombok ライブラリ - クラス関連 - Status Code 303 - See Other
Lombok ライブラリ - フィールド関連 - Status Code 303 - See Other
Lombok ライブラリ - その他 - Status Code 303 - See Other
対象パッケージ
- lombok
- lombok.experimental
- lombok.extern.*
今後更新予定
- lombok.exprimental