ロンボク島の@ NoArgsConstructor、@ RequiredArgsConstructor、@ AllArgsConstructorアノテーションの詳細な説明

パーティーBのプロジェクトはlombokプラグインを使用しているので、lombokプラグインの注釈を調べて要約しました。エラーがある場合は、修正してください。

1つ、参照

https://projectlombok.org/features/constructor

2.まとめ

注釈 コンストラクターパラメーター null以外のチェック 備考
@NoArgsConstructor パラメータなし 番号 利用可能なパラメータ
@RequiredArgsConstructor 初期化されていない最終フィールド、null以外としてマークされたフィールド 持ってる パラメーター@RequiredArgsConstructor(staticName = "of")を使用してコンストラクターをプライベート化し、コンストラクターを作成するための静的関数を提供できます。
@AllArgsConstrutor すべてのフィールドに使用可能なパラメーターがあります 持ってる @AllArgsConstrutor(access = AccessLevel.PROTECTED)を使用して、コンストラクターのアクセスレベルを制御します。

3、詳細

@NoArgsConstructor

@NoArgsConstructorは、
パラメーターなしのコンストラクターを生成するために使用されます。最終フィールドが初期化されていないために構築が失敗した場合、コンパイルは失敗します。@NoArgsConstructor(force
= true)パラメーターを使用して、初期化されていないfianlフィールドに0 / false / nullの値を強制的に割り当てることができます。制約付きフィールド(@NonNullフィールドなど)の場合、チェックは実行されません。したがって、これらのフィールドが適切に初期化されるまで、これらの制約は無効であることに注意してください。

@RequiredArgsConstructor

@RequiredArgsConstructor
は、特別な処理が必要なフィールドに対して1つのパラメーターを持つコンストラクターを生成します。初期化に失敗したすべてのfianlフィールド、および@NonNullとしてマークされ、宣言時に初期化されなかったフィールドは、コンストラクターのパラメーターです。
パラメータの順序は、クラス内のフィールドの順序と一致しています。@ NonNullのフィールドもnull値がないかチェックされます。検証ルールが満たされない場合、nullポインタ例外がスローされます。

@AllArgsConstructor

@AllArgsConstructor:クラスの各フィールドに1つのパラメーターを持つコンストラクターを生成します。@Non Nullとしてマークされたフィールドは、null値がないかチェックされます。

4、ケース

ロンボクアノテーションを使用する

import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.NonNull;

@RequiredArgsConstructor(staticName = "of")
//增加RequiredArgsConstructor注解,可以对description字段生成私有构造函数,同时提供一个静态函数of进行创建。
@AllArgsConstructor(access = AccessLevel.PROTECTED)
//增加了AllArgsConstructor注解,可以生成一个全参构造函数,访问权限为protected。
public class ConstructorExample<T> {
    
    
  private int x, y;
  @NonNull private T description;
  
  @NoArgsConstructor
  //静态内部类,创建一个无参构造,对于field字段不做校验。
  public static class NoArgsExample {
    
    
    @NonNull private String field;
  }
}

ロンボクアノテーションを使用しないでください

public class ConstructorExample<T> {
    
    
  private int x, y;
  @NonNull private T description;
  
  //创建了私有构造方法,参数为description,并对其进行非null校验。然后创建了静态of方法创建构造方法。
  private ConstructorExample(T description) {
    
    
    if (description == null) throw new NullPointerException("description");
    this.description = description;
  }
  
  public static <T> ConstructorExample<T> of(T description) {
    
    
    return new ConstructorExample<T>(description);
  }
  
  @java.beans.ConstructorProperties({
    
    "x", "y", "description"})
  //按参数顺序创建构造了函数,并对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() {
    
    
    }
  }
}

おすすめ

転載: blog.csdn.net/weixin_44159662/article/details/109990456