lombokの使用、コードの簡略化と省力


ブログを見ていると、lombokを使ってjavabeanコードを簡略化することを強くお勧めするブロガーによく会います.そこで、新しいプロジェクトの開発に乗じて、私はこのlombokを勉強して応用しました.lombokを使ってから、それがない時に戻りたくないと感じました.この文章は自分でlombokを勉強するためにまとめて、思い出して使いやすいです.
まず典型的なlombokを使ったjavabeanを見てみましょう
@Data
public class User {
    private String id;
    private String name;
}

このクラスは、注釈@Dataを使用して、すべての属性のgetterメソッドとsetterメソッド、およびequals、canEqual、hashCode、toStringの明示的ないくつかのコードを省略するのに役立ちます.

lombokって何?


lombokは手間を省くツールで、注釈で必要なjavaテンプレートを手動で作成する方法(getter、setterなど)を省くことができ、コードをコンパイルするときにlombokは関連方法を生成します.
  • 公式住所:https://projectlombok.org/
  • githubアドレス:https://github.com/rzwitserloot/lombok
  • jar:
  •     <dependency>
         <groupId>org.projectlombokgroupId>
         <artifactId>lombokartifactId>
         <version>1.16.14version>
        dependency>
  • ideはlombokプラグインをインストールする必要があります.そうしないと、lombokで省略したメソッドideを呼び出すとエラーが表示されます.IntelliJ IDEAではLombok Pluginをダウンロードできます.

  • lombok注記

  • @Getter / @Setterはクラスに使用され、すべての非静的属性に対してGetter/Setterメソッドを生成する.属性に使用して、指定した属性に対してGetter/Setterメソッドを生成します.デフォルトで生成されたGetter/Setterメソッドのアクセスレベルはpublicであり、同様の方法でアクセスレベル:@Setter(AccessLevel.PROTECTED) private String name;を変更できます.
  • @ToStringはtoStringメソッドを生成するために使用され、デフォルトではクラス名、すべての属性が出力され、属性は順番に出力され、カンマで分割されます.TOStringメソッドの出力プロパティ、@ToString(exclude = "id")を除外します.toStringメソッドは、親toString、@ToString(callSuper = true)を呼び出します.
  • @EqualsAndHashCodeはequalsメソッドとhascodeメソッドを生成するために使用され、デフォルトuse all non-static、non-transient fieldsは使用属性を排除し、@EqualsAndHashCode(exclude={"id", "shape"});親属性、@EqualsAndHashCode(callSuper=true)
  • を使用
  • @NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor構造方法、それぞれ無パラメトリック、部分パラメータコンストラクタ、全パラメトリックコンストラクタ公式の列:
  • With Lombok
    import lombok.AccessLevel;
    import lombok.RequiredArgsConstructor;
    import lombok.AllArgsConstructor;
    import lombok.NonNull;
    
    @RequiredArgsConstructor(staticName = "of")
    @AllArgsConstructor(access = AccessLevel.PROTECTED)
    public class ConstructorExample {
      private int x, y;
      @NonNull private T description;
    
      @NoArgsConstructor
      public static class NoArgsExample {
        @NonNull private String field;
      }
    }
    Vanilla Java
    public class ConstructorExample {
      private int x, y;
      @NonNull private T description;
    
      private ConstructorExample(T description) {
        if (description == null) throw new NullPointerException("description");
        this.description = description;
      }
    
      public static  ConstructorExample of(T description) {
        return new ConstructorExample(description);
      }
    
      @java.beans.ConstructorProperties({"x", "y", "description"})
      protected ConstructorExample(int x, int y, T description) {
        if (description == null) throw new NullPointerException("description");
        this.x = x;
        this.y = y;
        this.description = description;
      }
    
      public static class NoArgsExample {
        @NonNull private String field;
    
        public NoArgsExample() {
        }
      }
    }
  • @Data@ToString,@EqualsAndHashCode,@Getter,@Setter,@RequiredArgsConstructorの機能集合で、これがよく使われているような気がします.
  • @NonNullプロパティ、ローカル変数、メソッドでは、対応するパラメータが空の場合、空のポインタ異常が放出されます.
  • @Builderはコンストラクタを生成するために使用されます.
  • @Synchronizedは、指定したメソッドに同期ロックを追加するために使用されます.
  • @Logは、logオブジェクトを取得するコードを1行省いた.
  • @CommonsLog
        Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class); 
    @JBossLog
        Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class); 
    @Log
        Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName()); 
    @Log4j
        Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class); 
    @Log4j2
        Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class); 
    @Slf4j
        Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class); 
    @XSlf4j
        Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class); 

    他にも公式サイトで見ることができる注釈があります.

    lombokのメリットとデメリット

  • の利点:手間が省け、テンプレートコードをたくさん書くことが少なくなります.属性の変更によるエラーを低減します.
  • 欠点:可読性が悪い;複数のパラメータコンストラクタのリロードはサポートされていません.