web-dev-qa-db-ja.com

Project Lombok @Dataアノテーションは、あらゆる種類のコンストラクターを作成しますか?

@Dataアノテーションを持つクラスがありますが、引数付きのコンストラクターが生成されるのか、生成された唯一のコンストラクターがVanilla Javaのデフォルト(引数なし)なのかわかりません。

17
JoseHdez_2

@RequiredArgsConstructorは、コンストラクターが定義されていない場合に生成されます。

Project Lombok @Dataページ の説明:

@Dataは、クラスに暗黙的な@ Getter、@ Setter、@ ToString、@ EqualsAndHashCode、および@ RequiredArgsConstructor注釈を持つようなものです(明示的に記述されたコンストラクタが存在する場合、コンストラクタは生成されないことを除く)

24
JoseHdez_2

@Dataは@RequiredArgsConstructorのみを作成しています。 データアノテーション および コンストラクタ に関するLombokドキュメントサイトの説明:

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

Lombok @Dataアノテーションを使用するPOJOがあるとします:

public @Data class Z {
    private String x;
    private String y;
}

Zクラスに「必須」の引数がないため、Z z = new Z(x、y)としてオブジェクトを作成することはできません。 @Dataはプロパティのセッターとゲッターを提供し、インスタンスの作成後にsetXとsetYを呼び出すことができるため、ゼロパラメーターでコンストラクターを作成しています。

Xとyを@NonNullまたはfinalにして、コンストラクターに渡すか、クラスZに@AllArgsConstructorで注釈を付ける必要があります。

2
Surbhi Gupta