Lombok冗長なJavaコードの排除
7928 ワード
1.概要
Lombokは、コンパイル中にsetter/getter/toString()/constructorなどのコードを自動的に生成するために、注釈が必要だが肥大化しているjavaコードを排除するための簡単な注釈の形式を提供しています.コードが少ないほど、バグが発生する可能性が低いことを意味します.参考ブログ:https://projectlombok.org/features/index.html
2.使用
まずLombokプラグインをインストールし、関連jarパッケージをインポートすると、コード内で注釈を使用してコードを簡略化できます.
1)val
valは局所変数を修飾するために使用され、具体的なタイプを書く必要はありません.初期化された式によってそのタイプが発売されます.この局所変数はfinalです.
2)@NonNull
メソッドまたはコンストラクタのパラメータがnullでないことを確認し、nullの場合は例外を放出します.
3)@Cleanup
リソースの解放を保証
4)@Getter And @Setter
自動生成POJO内のgetterメソッドとsetterメソッド
5)@ToString
AutoStringメソッドの自動生成
6)@EqualsAndHashCode
equalsメソッドとhashCodeメソッドの自動生成
7)NoArgsConstructor, @AllArgsConstructor,@RequiredArgsConstructor
じどうせいせいコンストラクタ
8)@Data
@Dataは@ToString,@EqualsAndHashCode,@Getter/@Setter and@RequiredArgsConstructorの組合せに等しい
Lombokは、コンパイル中にsetter/getter/toString()/constructorなどのコードを自動的に生成するために、注釈が必要だが肥大化しているjavaコードを排除するための簡単な注釈の形式を提供しています.コードが少ないほど、バグが発生する可能性が低いことを意味します.参考ブログ:https://projectlombok.org/features/index.html
2.使用
まずLombokプラグインをインストールし、関連jarパッケージをインポートすると、コード内で注釈を使用してコードを簡略化できます.
1)val
valは局所変数を修飾するために使用され、具体的なタイプを書く必要はありません.初期化された式によってそのタイプが発売されます.この局所変数はfinalです.
public String example() {
val example = new ArrayList<String>();
example.add("Hello, World!");
val foo = example.get(0);
return foo.toLowerCase();
}
public void example2() {
val map = new HashMap<Integer, String>();
map.put(0, "zero");
map.put(5, "five");
for (val entry : map.entrySet()) {
System.out.printf("%d: %s
", entry.getKey(), entry.getValue());
}
}
2)@NonNull
メソッドまたはコンストラクタのパラメータがnullでないことを確認し、nullの場合は例外を放出します.
public class NonNullExample {
private String name;
public NonNullExample(@NonNull Person person) {
this.name = person.getName();
}
}
3)@Cleanup
リソースの解放を保証
public static void main(String[] args) throws IOException {
// close ,
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[1024];
while (true) {
int r = in.read(b);
if (r == -1)
break;
out.write(b, 0, r);
}
}
4)@Getter And @Setter
自動生成POJO内のgetterメソッドとsetterメソッド
public class GetterSetterExample {
@Getter @Setter private int age = 10;
//setName protected
@Setter(AccessLevel.PROTECTED) private String name;
}
5)@ToString
AutoStringメソッドの自動生成
// id
@ToString(exclude="id")
public class ToStringExample {
private static final int STATIC_VAR = 11; //
private String name;
private String[] tags;
private int id;
}
6)@EqualsAndHashCode
equalsメソッドとhashCodeメソッドの自動生成
@EqualsAndHashCode(exclude={"id"})
public class EqualsAndHashCodeExample {
private transient int transientVar = 11; //
private String name;
private double score;
private String[] tags;
private int id; //
}
7)NoArgsConstructor, @AllArgsConstructor,@RequiredArgsConstructor
じどうせいせいコンストラクタ
//@NonNull final
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor(access=AccessLevel.PROTECTED)
public class ConstructorExample {
private int x, y;
@NonNull private T description; // null
@NoArgsConstructor
public static class NoArgsExample {
private String field;
}
}
8)@Data
@Dataは@ToString,@EqualsAndHashCode,@Getter/@Setter and@RequiredArgsConstructorの組合せに等しい
@Data
public class DataExample {
private final String name; //
@Setter(AccessLevel.PACKAGE) private int age;
private double score;
private String[] tags;
}