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); }
ありがたみが薄い。