Java のコード量を激減できる lombok がスゴイ
きしださんのブログで知った lombok という Java のライブラリがスゴイ。
http://projectlombok.org/
指定されたアノテーションを付与することで、下記のようにメソッドを生成してくれる。
これを用いると、Java のコード量をかなり減らせることができる。
例1 setter, getter を自動生成したい場合
import lombok.Getter; import lombok.Setter; public class Person { @Setter @Getter private String name; @Setter @Getter private int age; }
このように、setter と getter を自動生成させたいフィールドに @Setter, @Getter を付与する。もちろん片方だけでもOK。
@Getter をつけたフィールドは getter のみ自動生成される。
上記のコードは下記のように、普通に動く。
Person p = new Person(); p.setName("aoking"); p.setAge(26); System.out.println(p.getName()); // -> aoking System.out.println(p.getAge()); // -> 26
例2 toString の自動生成
上記の Person クラスに toString メソッドを実装したい時、自前で ToStringBuilder なんかを使って書くことが多かったが、@ToString をクラス名につければ OK。
import lombok.Getter; import lombok.Setter; import lombok.ToString; @ToString public class Person { @Setter @Getter private String name; @Setter @Getter private int age; }
すると・・・
Person p = new Person(); p.setName("aoking"); p.setAge(26); System.out.println(p); // -> Person(name=aoking, age=26)
うむ。便利。
例3 hashCode/equals の自動生成
@EqualsAndHashCode でいい感じのコードを自動生成してくれます。
import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; import lombok.ToString; @ToString @EqualsAndHashCode public class Person { @Setter @Getter private String name; @Setter @Getter private int age; }
例4 Bean
前述の例で使った Person クラスは単なる Bean。Bean には @Setter @Getter @ToString @EqualsHashCode をつけなくとも、@Data 一個で OK。
なんとシンプル!
@Data public class Person { private String name; private int age; }
例5 不変クラス
Person を不変クラスにしたい場合。フィールドを final にして、@Value をクラス名に付与すれば OK。
import lombok.Value; @Value public class Person { private final String name; private final int age; }
使い方
Person p = new Person("aoking", 26); System.out.println(p.getName()); // -> aoking System.out.println(p.getAge()); // -> 26 System.out.println(p); // -> Person(name=aoking, age=26)
基本的にはここまでの @Setter, @Getter, @ToString, @EqualsHashCode, @Data, @Value を抑えておけばかなりのコード量を削減できる。
自動生成可能なコードを削減出来るということは、そうではないコード(いわゆるロジック)の密度が上がり、ロジックに集中してコードを書くことができる。
特に @Data, @Value がどれだけコードを削減できているのかについて、公式ドキュメントを参照して欲しい。
http://projectlombok.org/features/Data.html
http://projectlombok.org/features/Value.html
さて、その他の lombok の機能。
val
こいつはスゴイ。型推論のような機能。
List<Map<Integer,String>> のような型がある時にはかなり役立ちそう。
val example = "hello world"; System.out.println(example); // -> hello world val list = new ArrayList<String>(); list.add("message"); System.out.println(list.get(0)); // -> message
@Log
@Log を付与すると、log という名前のロガーが用意される。
ロギングライブラリごとにアノテーションが用意され、log4j なら @Log4j, slf4j なら @Slf4j が用意されてたりする。
@Cleanup
リソース変数 (Reader とか InputStream とか)にこのアノテーションを付与すると、自動的に close してくれる。
close でない場合はメソッド名を指定できるので、実質どんな変数に対しても割り当て可能。try-with-resources より便利かも?
まとめ
スゴイの一言に尽きる。
この勢いで、ラムダ記法を用意してくれないかな。
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 273回
- この商品を含むブログ (68件) を見る