lombokの使用、コードの簡略化と省力
9403 ワード
ブログを見ていると、lombokを使ってjavabeanコードを簡略化することを強くお勧めするブロガーによく会います.そこで、新しいプロジェクトの開発に乗じて、私はこのlombokを勉強して応用しました.lombokを使ってから、それがない時に戻りたくないと感じました.この文章は自分でlombokを勉強するためにまとめて、思い出して使いやすいです.
まず典型的なlombokを使ったjavabeanを見てみましょう
このクラスは、注釈
lombokは手間を省くツールで、注釈で必要なjavaテンプレートを手動で作成する方法(getter、setterなど)を省くことができ、コードをコンパイルするときにlombokは関連方法を生成します.公式住所:https://projectlombok.org/ githubアドレス:https://github.com/rzwitserloot/lombok jar: ideはlombokプラグインをインストールする必要があります.そうしないと、lombokで省略したメソッドideを呼び出すとエラーが表示されます.IntelliJ IDEAではLombok Pluginをダウンロードできます.
@ToStringはtoStringメソッドを生成するために使用され、デフォルトではクラス名、すべての属性が出力され、属性は順番に出力され、カンマで分割されます.TOStringメソッドの出力プロパティ、 @EqualsAndHashCodeはequalsメソッドとhascodeメソッドを生成するために使用され、デフォルトuse all non-static、non-transient fieldsは使用属性を排除し、 を使用@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor構造方法、それぞれ無パラメトリック、部分パラメータコンストラクタ、全パラメトリックコンストラクタ公式の列: @Data@ToString,@EqualsAndHashCode,@Getter,@Setter,@RequiredArgsConstructorの機能集合で、これがよく使われているような気がします. @NonNullプロパティ、ローカル変数、メソッドでは、対応するパラメータが空の場合、空のポインタ異常が放出されます. @Builderはコンストラクタを生成するために使用されます. @Synchronizedは、指定したメソッドに同期ロックを追加するために使用されます. @Logは、logオブジェクトを取得するコードを1行省いた.
他にも公式サイトで見ることができる注釈があります.
の利点:手間が省け、テンプレートコードをたくさん書くことが少なくなります.属性の変更によるエラーを低減します. 欠点:可読性が悪い;複数のパラメータコンストラクタのリロードはサポートされていません.
まず典型的な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は関連方法を生成します.
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.16.14version>
dependency>
lombok注記
@Getter / @Setter
はクラスに使用され、すべての非静的属性に対してGetter/Setterメソッドを生成する.属性に使用して、指定した属性に対してGetter/Setterメソッドを生成します.デフォルトで生成されたGetter/Setterメソッドのアクセスレベルはpublic
であり、同様の方法でアクセスレベル:@Setter(AccessLevel.PROTECTED) private String name;
を変更できます.@ToString(exclude = "id")
を除外します.toStringメソッドは、親toString、@ToString(callSuper = true)
を呼び出します.@EqualsAndHashCode(exclude={"id", "shape"})
;親属性、@EqualsAndHashCode(callSuper=true)
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() {
}
}
}
@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);
他にも公式サイトで見ることができる注釈があります.