@ NoArgsConstructor、@ RequiredArgsConstructor、@ AllArgsConstructor



Noargsconstructor Requiredargsconstructor



順番に生成されるコンストラクター:引数なし、final / null以外のフィールドごとに1つの引数、またはフィールドごとに1つの引数を持つコンストラクターを生成します。

概要概要

この3つの注釈のセットは、あるフィールドの1つの引数を受け入れ、この引数をフィールドに割り当てるコンストラクターを生成します。



@NoArgsConstructor引数のないコンストラクターが生成されます。これが不可能な場合(最後のフィールドのため)、@NoArgsConstructor(force = true)使用してから使用しない限り0 / false /すべての最後のフィールドを初期化nullしない限りコンパイラエラーが発生します。制約のあるフィールド(@NonNullフィールドなど)の場合、 しない 生む どれか チェックするので、これらのフィールドが後で適切に初期化されるまで、これらの制約は通常満たされないことに注意してください。一部のJavaコンストラクト(Hibernateやサービスプロバイダーインターフェイスなど)には、引数なしのコンストラクターが必要です。このコメントは主に関連しています@Dataコメントを生成する他のコンストラクターの一方または両方が組み合わせて使用​​されます。

@RequiredArgsConstructor特別な処理が必要なフィールドごとに1つの引数を持つコンストラクターを生成します。すべて未初期化finalフィールドはパラメーターを取得し、それを@NonNull宣言された場所で初期化されていないフィールドとしてマークします。マークされたフィールド@NonNullの場合、明示的なnullチェックも生成されます。コンストラクターはa NullPointerException Ifを使用して@NonNullを含むフィールドへの任意の引数nullをマークします。パラメータの順序は、フィールドがクラスに表示される順序と一致します。



@AllArgsConstructorクラスの各フィールドに1つの引数を持つコンストラクターを生成します。マーク@NonNull結果のフィールドは、これらのパラメーターをチェックします。

これらのアノテーションはそれぞれ、生成されたコンストラクターが常にプライベートであり、プライベートコンストラクターを囲む追加の静的ファクトリメソッドを生成する代替フォームの使用を可能にします。 staticNameこのモードを有効にする値を次のようにコメントします:@RequiredArgsConstructor(staticName='of')。通常のコンストラクターとは異なり、この静的ファクトリメソッドはジェネリックスを推測します。これは、APIユーザーが書くことができることを意味しますMapEntry.of('foo', 5)もうありませんnew MapEntry('foo', 5)

生成されたコンストラクターにコメントを追加するには、root@xxxxx__({@AnnotationsHere})を使用できますが、これは実験的な機能であることに注意してください。詳しくはこちらをご覧ください onX 機能ドキュメント。



これらのコメントは静的フィールドをスキップします。

他のほとんどのロンボクアノテーションとは異なり、明示的なコンストラクターが存在しても、これらのアノテーションが独自のコンストラクターを生成することを妨げることはありません。これは、独自のプライベートコンストラクターを作成し、lombokにボイラープレートを生成させることができることを意味します。競合がある場合(あなたのコンストラクターは最終的に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 } }

バニラジャワ

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() { } } }

サポートされている構成キー:

lombok.anyConstructor.addConstructorProperties = [true | false] (default: false)
lombok.[allArgsConstructor|requiredArgsConstructor|noArgsConstructor].flagUsage = [warning | error] (default: not set)
lombok.anyConstructor.flagUsage = [warning | error] (default: not set)
lombok.copyableAnnotations = [A list of fully qualified types] (default: empty list)

小さなプリント

フィールドが明示的に初期化されている場合でもnull、lombokはnull満足の要件を回避することも検討します。 しない このフィールドを「必須」パラメーターとして扱います。 nullマークも付けたもの@NonNull信号のフィールドを明示的に指定するとします。何をしているのかを知っている必要があります。

will @java.beans.ConstructorProperties引数のないコンストラクターの注釈になることはありません。これは、理由@NoArgsConstructor不足suppressConstructorPropertiesコメント方法も説明します。生成された静的ファクトリメソッドも使用できません@ConstructorPropertiesこのアノテーションは実際のコンストラクタにのみ追加できるためです。

@XArgsConstructor列挙定義にも使用できます。非プライベートコンストラクターは列挙で有効ではないため、生成されたコンストラクターは常にプライベートになります。指定する必要はありませんAccessLevel.PRIVATE

ヌル性に関するさまざまなよく知られた注釈により、空のチェックが挿入され、パラメータにコピーされます。詳細については、を参照してください。 ゲッター/セッター ドキュメントの小さいフォント。

in flagUsage構成キーの生成によってトリガーされた場合@Data@Valueまたはその他のLombokコメント。

転載:https://www.jianshu.com/p/7d69eadc839e