パーティー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() {
}
}
}