Lombok冗長なJavaコードの排除

7928 ワード

1.概要
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;
 }