クラスがあります
public class Answer<T> {
private T data;
public Answer(T data) {
this.data = data;
}
public Answer() {
}
public T getData() {
return data;
}
public Answer<T> setData(T data) {
this.data = data;
return this;
}
}
Lombok
で簡略化したい。
アノテーションを追加した場合@AllArgsConstructor
デフォルトのコンストラクタが見えません。
@Data
@AllArgsConstructor
public class Answer<T> {
private T data;
public Answer<T> setData(T data) {
this.data = data;
return this;
}
}
Lombok
に両方のコンストラクターを含めることは可能ですか?
クラスは以下と同等です。
_@Accessors(chain = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Answer<T> {
private T data;
}
_
厳密に言うと、これはall変数にtoString
、equals
、hashCode
メソッドを追加します。これにより、無限ループが発生する可能性があります(多くの場合、発生します)。 _@Data
_には十分注意してください。
@Accessors(chain = true)
は、setter
実装がthis
を返すようにします。詳細は here です。
複数のコンストラクタアノテーションを追加できます。
他のほとんどのロンボクアノテーションとは異なり、明示的なコンストラクターが存在しても、これらのアノテーションが独自のコンストラクターを生成することは妨げられません。
_@Accessors
_は実験的なものであり、将来変更される可能性があることに注意してください。
私は _@Builder
_ よりも_@AllArgsConstructor
_よりも required パラメータのみを設定できるので、すべての引数のコンストラクタはすべてまたは何もないため、 。また、はるかに読みやすいコードを生成します。
_new Thing(true, 1, 4, false, 4, 4.0)
_
Versus
_new Thing.Builder().
setANamnedProperty(true).
setAnotherNamnedProperty(1).
....
build();
_
これを試しましたか?
@NoArgsConstructor
@AllArgsConstructor
これを試して。これはうまくいくはずです。この注釈も追加します。
@NoArgsConstructor
@NoArgsConstructorは、パラメーターのないコンストラクターを生成します。これが不可能な場合(最終フィールドのため)、@ NoArgsConstructor(force = true)を使用しない限り、代わりにコンパイラエラーが発生し、すべての最終フィールドは0/false/nullで初期化されます。 @NonNullフィールドなどの制約のあるフィールドの場合、チェックは生成されません。したがって、これらのフィールドが後で適切に初期化されるまで、これらの制約は通常満たされないことに注意してください。特定のJava構成には、引数なしのコンストラクターが必要です。このアノテーションは、@ Dataまたはアノテーションを生成する他のコンストラクターのいずれかと組み合わせて主に役立ちます。
はい、Lombokでは両方のコンストラクターを使用できます。
@NoArgsConstructor
@AllArgsConstructor
@ AllArgsConstructorは、注釈付きクラスのすべてのフィールドに引数を必要とするコンストラクタを生成します。
したがって、2つのフィールドを持つEmployeeクラスがあります。
@AllArgsConstructor
public class Employee {
private String name;
private int salary;
}
クラスをde-lombokすると、次のようになります。
public class Employee {
private String name;
private int salary;
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
}
@ NoArgsConstructorは、パラメーターのないデフォルトのコンストラクターを生成します。
次のEmployeeクラスがあります。
@NoArgsConstructor
public class Employee {
private String name;
private int salary;
}
生成されたコードを見ると、Lombokが引数なしのコンストラクターを追加していることがわかります。
public class Employee {
private String name;
private int salary;
public Employee() {
}
}