Javaの「Lombok 」はボイラープレートをシンプルにしてくれるJavaのライブラリです。getter
、setter
、toString
、equals
などを自動生成してくれます。
🍣 バリデーション nullチェックを自動生成:@NonNull
@NonNull
でメソッドの引数をアノテートすると、コンパイル時にnullチェックを自動生成してくれます。
public class Main { public static void main (String... args) { method("hoge" ); method(null ); } private static void method (@NonNull String value) { System.out.println(value); } }
🐯 メソッドの自動生成 ゲッター&セッターメソッド:@Getter
、@Setter
@Getter
でゲッターメソッドを、@Setter
でセッターメソッドを自動生成します。
@Getter
引数のAccessLevel
でアクセス制御を設定
@Getter
引数のlazy=true
で値の初期化をゲッターメソッドが最初に呼ばれるまで遅延
public class Main { @Getter @Setter private String value1; @Getter (AccessLevel.Private) private String value2; @Geter (lazy=true ) public static void main (String... args) { Main m = new Main(); System.out.println(m.getValue1()); } }
クラスのtoStringメソッドを自動生成:@ToString
@ToString
でクラスをアノテーションするとtoString()
メソッドを適切にオーバーライドしてくれます。
@ToString (exclude=ignore)public class Main { private int id = 100 ; private String value = "hoge" ; private List list = Arrays.asList("fizz" , "buzz" ); private double ignore = 999 ; public static void main (String[] args) { System.out.println(new Main()); } }
オプション
説明
callSuper
親クラスのtoStringを呼び出す
doNotUseGetters
getterメソッドを使わずに各メンバにアクセス
exclude
表示しないフィールドを設定。逆はof
includeFieldNames
フィールド名を含めないようにする
of
表示対象のフィールドを指定。
equalsとhasCodeメソッドを自動生成:@EqualsAndHashCode
@EqualsAndHashCode
でクラスをアノテートすると、equals()
メソッドとhasCode()
メソッドを自動生成します。
@EqualsAndHashCode public class Main { private int id = 100 ; private String value = "hoge" ; private List list = Arrays.asList("fizz" , "buzz" ); public static void main (String[] args) { Main a = new Main(); Main b = new Main(); System.out.println("a.hash = " + a.hashCode()); System.out.println("b.hash = " + b.hashCode()); System.out.println(a.equals(b)); } }
🗽 メソッドのサポート スコープから抜けたらcloseを実行:@CleanUp
@CleanUp
でローカル変数をアノテートすると、スコープから抜けるときにclose
(任意)のメソッドを呼び出すことができます。
public class Main { public static void main (String... args) { @Cleanup Main m = new Main(); @Cleanup (dispose) Main m = new Main(); } public void close () { System.out.println("Called close method" ); } public void dispose () { System.out.println("Called dispose method" ); } }
😸 コンストラクタの生成 全フィールドを引数にもつコンストラクタ:@AllArgsConstructor
@AllArgsConstructor public class Book { private int id; private String title; } Book main = new Book(1 , "タイトル" );
引数を持たないコンストラクタ:@NoArgsConstructor
@NoArgsConstructor public class Book { private int id; private String title; } Book main = new Book();
final付きフィールド引数とするコンストラクタ:@RequiredArgsConstructor
@RequiredArgsConstructor
をクラスにアノテートするとfinal
のついたフィールドだけを引数に受け取るコンストラクタを自動で生成します。
@RequiredArgsConstructor public class Book { private String optionalSubTitle; private final String requiredTitle; } Book main = new Book("必須のタイトル" );
🐡 まとめてアノテーション Getter/Setterをもつ値の設定:@Data
@Data
でクラスをアノテートすると@ToString
、@Getter
、@Setter
、@EqualsAndHashCode
、@RequiredArgsConstructor
を設定したことになります。
@Data public class Main { private final String required; private int number; public static void main (String[] args) { Main a = new Main(data); a.setNumber(100 ); Main b = new Main(data); b.setNumber(100 ); System.out.println("a = " + a); System.out.println(a.equals(b)); } }
Getterをもつ値の設定:@Value
@Value
でクラスをアノテートすると次の効果を得ることができます。
@ToString
、@Getter
、@EqualsAndHashCode
、@AllArgsConstructor
が自動生成
クラス・各フィールドはfinal
になる
各フィールドはprivate
になる
@Value public class Main { private String required; }
😎 ロガー SLF4Jを使う:@slf4j
ロガー「SLF4J 」を使えるようにするアノテーションに@slf4j
があります。
@Slf 4jpublic class Main { public static void main (String[] args) { log.info("Hello SLF4J!" ); } }
ロガー側の出力は次のようになります。
[main] INFO xxx - Hello SLF4J!
🚕 boolean型のGetterメソッド:isXXX
boolean型のgetterメソッドはisXXX
となります。
public class Main { @Getter @Setter private boolean private ; public static void main (String... args) { Main m = new Main(); System.out.println(m.isPrivate()); } }
🍮 補足:IntelliJでLombokを使えるようにする
IntelliJにLombokプラグインを導入
Project Lombokからlombok.jaをダウンロードして依存関係に追加
IntelliJのPreference > Compiler > Annotation Processors
を有効にする
IntelliJでLombok
🐞 参考リンク
🖥 VULTRおすすめ
「VULTR 」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTR のヘビーユーザーになので、「ここ 」から会員登録してもらえるとサービス開発が捗ります!