[Java]Lombok宣言


@ToString
  • toString()メソッドを自動的に生成します.
  • excludeで除外するフィールドを指定できます.
  • callSuper値をtrueに設定すると、継承されたクラスの情報が出力されます.(Default = false)
  • @ToString(exclude = "password")
    public class User {
    	private String id;
        private String password;
    }
  • ToStringは、トークン値、パスワードなどの機密情報を排除することができる.
  • @Builderビルダーの自動作成
    複数のフィールドを持つ複雑なクラスでは、コンストラクタではなくコンストラクタを使用する場合にのみ使用します.コンストラクタモードを直接記述すると,符号化量が予想外に高い.@Builerは、コンストラクタをクラスに自動的に追加するため、操作が便利です.
    @Builder
    public class User {
    	private Long id;
        private String username;
        private String password;
        @Singular
        private List<Integer> scores;
    }
    @Singularの宣言をコレクションフィールドで宣言した後、すべての要素を一度にスキップすることなく要素を追加できます.
    User user = User.builder()
    	.id(1L)
        .username("abc")
        .password("1234")
        .score(70)
        .socre(80)
        .build();
    // User(id=1, username=dale, password=1234, scores=[70, 80])
    @NoArgsConstructor
  • パラメータのないデフォルトジェネレータを生成します.
  • アクセス・レベルでアクセス制限を指定できます.
    推奨使用方法
  • @NoArgConstructor(access=accessLevel.PROTED)を使用して、オブジェクトの作成時のセキュリティを確保することを推奨します.
  • のデフォルトジェネレータをpublic(default)に開くと、セキュリティが大幅に低下します.
  • @RequiredArgsConstructor(無効化を推奨)
    パラメータとして
  • finalまたは@NonNull変数のみを受け入れるジェネレータを生成します.
  • アクセス・レベルでアクセス制限を指定できます.
    Use
  • @NoArgsConstructor
    public class User{
      @NonNull
      private String id;
      private String password;
    }
    Unuse
    public class User{
      private String id;
      private String password;
      
      public User(String id){
          this.id = id
      }
    }
    @AllArgsConstructor(無効化を推奨)
  • のすべての変数をパラメータの生成器として生成します.
  • アクセス・レベルでアクセス制限を指定できます.
  • 推奨される使用法
    @AllArgsConstructor
    public class User {
    	private String id;
        private String pwd;
    }
    
    User user = new User("userId", "userPwd");
    このように初期設定が行われた場合.
    @AllArgsConstructor
    public class User {
    	private String pwd;
        private String id;
    }
    
    User user = new User("userId", "userPwd"); //pwd,id의 위치가 바꼈지만 입력 매게변수는 위치가 바뀌지 않았다.
  • しかし、開発者が突然変数の位置を変更すると、ジェネレータの位置も変更されますが、入力の両方がStringなのでエラーは発生しません.開発者がそれを認識しなければ、致命的なエラーが発生します.
  • したがって、Annotationは使用しないことをお勧めします.推奨される使用法
    public static class User {
    	private String pwd;
        private String id;
        
        @Builder
        public User(String pwd, String id) {
        	this.pwd = pwd;
            this.id = id;
        }
    }
    
    User user = User.builder().pwd("userPwd").id("userId").build();
  • はこのようにして直接生成したジェネレータに@Builder Annotationを使用し,以下に示すように開発者のエラーを最大限に防止する.
  • builderは順番ではなく名前で入力されているからです.
  • @Data(無効化推奨)
  • @ToString、@EqualsAndHashCode、@Getter、@Setter、@RequiredArgConstructorを含むAnnotation.
  • 推奨される使用法
  • の使用を禁止し、Getter/Setterなど必要なAnnotationをそれぞれ宣言することをお勧めします.
  • @Value(無効)
  • 不変の対象を宣言します.
  • 適切なAnnotationを使用する場合、setterメソッドは使用できません.
    @Value
    @Setter //ignore
    public class User {
    	public String id;
        public String password;
    }

  • Setterを発表しても使えません.
    推奨される使用法

  • @Valueには@EqualsAndHashCodeと@AllArgConstructorも含まれています.

  • @Getterと@ToStringのみを使用することをお勧めします.
  • じどうせいせいレコーダ
    クラスごとにログを作成するのは面倒です.このとき、@Log操作によりログフィールドが自動的に作成され、クラス名でログオブジェクトが作成され、割り当てられます.@Logおよび@Slf4jを含む様々な記録フレームワークの対応方法を提供する.
    @Log
    public class LogExample {
    	//자동 생성
        public static void main(String... args) {
        	log.info("TEST");
        }
    }
    @NonNull Nullチェック@Log4j2文を変数に追加すると、@NonNullが自動的にチェックされます.変数がnullを超えた場合、nullに異常が発生します.
    @NonNull @Setter
    private String id;
    obj.setId(null); // NullPointerException 발생
    リソースを自動的に閉じる
    IO処理やJDBC符号化を行う場合、NullPointerException文のtry-catch-finally節でfinallyを呼び出す方法は容易なことではなく、close()文を使用することでリソースの自動閉鎖を確保することができる.
    @Cleanup Connection con = DriverManager.getConnection(url, user, password);
    例外処理のスキップ
    Checked Exceptionのため、@Cleanupまたはthrows構文で明示的に例外処理を行う必要がある場合があります.この場合、try-catchの動作は、明示的な例外処理をスキップする.善し悪しは分かれる.
    @SneakyThrows(IOException.class)
    public void printLines() {
    	BufferedReader reader = new BufferedReader(...);
        for (String line; (line = reader.readLine()) != null; ) {
        	System.out.println(line);
        }
    }
    同期
    メソッドでjavaの@SneakyThrowsキーワードを宣言すると、オブジェクトレベルで同期に関連する複数の問題が発生する可能性があります.逆に、synchronized操作を使用すると、仮想シーンレベルでより安全にロックを解除することができる.
    @Synchronized
    public void hello() {
    	System.out.println("world");
    }
    ソース
    https://www.daleseo.com/lombok-useful-annotations/
    https://ksshlee.github.io/spring/java/lombok/#tostring