Lombokとは
いい感じにAnnotaitionで、Javaのよく出てくる処理を書いてくれるやつ。
使うと世界が変わる。
網羅的にざっと書きます。
共通テク
うまくいかなかったらIDEのDelombokでバラして考えてみる。
ドキュメントも充実している。
よく使う
@Getter, @Setter
https://projectlombok.org/features/GetterSetter
名前の通りGetter,Setterを自動で作ってくれる。
クラスにもフィールドにも使用可能で、final
修飾されたフィールドのSetterはもちろん作られない。
@Getter @Setter public class Hoge { private int val; // ここにgetVal(), setVal(int val)みたいなのが作られるイメージ }
フィールドだと、
public class Hoge { @Getter @Setter private int val; }
残念ながらsynchronized
相当のものは作れない。
@ToString
https://projectlombok.org/features/ToString
クラスの先頭につけると、toString
のオーバーライドメソッドがいい感じに生成される。
迷ったらつけとけばいいと思う。
@ToStirng public class Hoge { private int val; private String hoge; // @Override public String toString() が生成される }
循環参照でハマったりしてtoString
で出したくないフィールドがあるときは、
@ToString // あるいはここで、@ToString(exclude = "secret") public class Hoge { private int val; @ToString.Exclude private String secret; }
こんな感じで指定する。
@EqualsAndHashCode
https://projectlombok.org/features/EqualsAndHashCode
equals
を用意するときにはhashCode
も用意しようということで、いっぺんにやってくれるやつ。
迷ったらつける。
@Data
https://projectlombok.org/features/Data
ここまでやった奴を全部つけてくれるアノテーション。
@Setter
、@Getter
、@ToString
、@EqualsAndHashCode
、@RequiredArgsConstructor
をつけてくれる。
@Data public class Hoge { private int var; private String hoge; // get, set, toString, equals, hasCode, canEqualsができる // この場合Hoge()もできる。詳細は後述 }
めんどくさいときは、これだけつけておけばOK。
@RequiredArgsConstructor
については後述。
@xxxArgsConstructor
https://projectlombok.org/features/constructor
- @NoArgsConstructor
- @AllArgsConstructor
- @RequiredArgsConstructor
この3種類がある。
クラスの先頭につけると、
@NoArgsConstructor
は引数なしのコンストラクタ、
@AllArgsConstructor
は全てのフィールドと対応する引数を持つコンストラクタを生成する。
@RequiredArgsConstructor
はfinal
フィールドに対してのみ初期化を行うコンストラクタを生成する。
@RequiredArgsConstructor public class Hoge { private final int val; private String hoge; /* このようなコンストラクタができる public Hoge(int val) { this.val = val; } */ }
@NonNull
https://projectlombok.org/features/NonNull
null
チェックを生成する。引数にnull
が入ってきた時点でNullPointerException
を吐いて落とす。
引数が多くなってくると、null
チェックも多くなってくるのでアノテーションでできると便利。
// nullが入ってきたら中に入る前に落としてくれる pubilc void hoge(@NonNull final String message) { message.hashCode(); }
知らなくても困らないやつ
@Builder
https://projectlombok.org/features/Builder
Builderパターンを自動生成する。
@Builder public class Hoge { private int val; private String name; // ごちゃごちゃBuilderパターンができる }
使うときは、
Hoge hogehoge = Hoge.builder() .val(1) .name("a") .build();
TPOに合わせて使うと便利かも。
@SneakyThrows
https://projectlombok.org/features/SneakyThrows
問題児。
チェック例外を非チェック例外をとして、ある意味握りつぶす。
使いどころは、コード上チェック例外が起こり得ないけど、Javaの仕様的にtry catch
を書くのを強いられて、めんどくさい時(ということだと思う)。
rethrow
みたいなの自作する時とかにも使えるかもしれない…。
普通に実装するのも、そんなに大変ではなさそう。
@SuppressWarnings("unchecked") public static <E extends Throwable> void sneakyThrow(Throwable e) throws E { throw (E) e; }
@Slf4j
つけるとSlf4j
のloggerを作ってくれる。
@Slf4j public class Hoge { // これができる // private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Hoge.class); }
ありがたみが薄い。