いい感じにAnnotaitionで、Javaのよく出てくる処理を書いてくれるやつ。
使うと世界が変わる。
網羅的にざっと書きます。
共通テク
うまくいかなかったらIDEのDelombokでバラして考えてみる。
ドキュメントも充実している。
よく使う
@Getter, @Setter
https://projectlombok.org/features/GetterSetter
名前の通りGetter,Setterを自動で作ってくれる。
クラスにもフィールドにも使用可能で、final
修飾されたフィールドのSetterはもちろん作られない。
@Getter @Setter
public class Hoge {
private 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;
}
循環参照でハマったりしてtoString
で出したくないフィールドがあるときは、
@ToString
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;
}
めんどくさいときは、これだけつけておけば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;
}
@NonNull
https://projectlombok.org/features/NonNull
null
チェックを生成する。引数にnull
が入ってきた時点でNullPointerException
を吐いて落とす。
引数が多くなってくると、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;
}
使うときは、
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 {
}
ありがたみが薄い。
まとめ
Lombok使うとJavaが楽しくなります。