JavaのLombokのアノテーションのサンプルです。
(確認環境:Java8,Eclipse4.8,Windows10)
目次
lombokとは
- getterとsetter等の定形コードを記述しなくて良くなる機能を持つライブラリです。
- アノテーションを付けることで実現します。
- ロンボックと呼びます。
- 機能はそれ以外にもあります。以下のLombok featuresのリンクを参照願います。
https://projectlombok.org/features/all
@Dataを指定 (getter,setter + 他)
package test1;
import lombok.Data;
@Data
public class Product {
private String name;
private int price;
}
2行目は、lombok.Dataをインポートしています。
4行目の@Dataアノテーションを付けると6,7行目の値は自動でgetterとsetterが付いていることになります。
アウトラインを見ると、getterとsetterが付いていることがわかります。
その他にequals()、hashCode()、toString()なども生成されます。
@Slf4jを指定 (ログを出力する)
package test1;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Test1 {
public static void main(String[] args) {
// Logger log = LoggerFactory.getLogger(Test1.class);
String str = "猫";
log.info("あれは{}です", str);
//00:55:46.097 [main] INFO test1.Test1 -あれは猫です
}
}
slf4jのログを出力する場合は、10行目が必要ですが7行目の@Slf4jアノテーションによって不要になります。結果として記述量が減ります。
12行目は、「log」を指定する必要があります。
@Getterと@Setter (getterとsetter)
getterとsetterのみ指定する場合です。
package test1;
import lombok.Getter;
import lombok.Setter;
public class Product {
@Getter
@Setter
private String id;
private String name;
private int price;
}
アノテーションの直下の項目のみが有効になります。
アウトラインを見ると「id」のgetterとsetterがあります。
@AllArgsConstructor (全項目でコンストラクタ)
@AllArgsConstructorは、全項目のコンストラクタを生成します。
package test1;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Product {
private String id;
private String name;
private int price;
}
アウトラインを見るとコンストラクタがあります。
→newするときは、全項目の指定が必要です。
例:Product product = new Product( 1 , "apple", 100 );
@AllArgsConstructorは、@NoArgsConstructorとの併用も可能です。
その場合コンストラクタは2つになります。
@NoArgsConstructor (デフォルトコンストラクタ)
@NoArgsConstructorは、デフォルトコンストラクタを生成します。
package test1;
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Product {
private String id;
private String name;
private int price;
}
アウトラインを見るとデフォルトコンストラクタがあります。
→newするときは、項目の指定が不要です。
例:Product product = new Product( );
@NoArgsConstructorは、@AllArgsConstructorとの併用も可能です。
その場合コンストラクタは2つになります。
@RequiredArgsConstructor (finalがある項目でコンストラクタ)
@RequiredArgsConstructorは、finalがある項目でコンストラクタを生成します。
package test1;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Product {
private long id;
private String name;
private final int price;
}
アウトラインを見るとコンストラクタの引数はfinalがあるintのみです。
→newするときは、finalがある項目の指定が必要です。
例:Product product = new Product( 1 );
@EqualsAndHashCode(equalsメソッドとhashcodeメソッド)
@EqualsAndHashCodeはequalsメソッドとhashcodeメソッドを生成します。
package test1;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Test1 {
private String name;
private int price;
}
@EqualsAndHashCode(callSuper = true)とした場合は対象を親クラスまで広げます。
関連の記事