POJOの1つには、データベースでNULLを許可するためのブールオブジェクトフィールドがあります(要件)。クラスレベルで@Data Lombokアノテーションを使用しながら、ブール型フィールドのゲッターをオーバーライドすることは可能ですか?生成されるデフォルトは、ブールフィールドのgetXXXメソッドです。 isXXX()としてオーバーライドしたいですか?
おかげで、
パディ
少し冗長ですが、独自のisXXX
を指定し、AccessLevel.NONE
を使用してgetXXX
を生成しないようにLombokに指示できます。
@Data
public class OneOfPaddysPojos {
// ... other fields ...
@Getter(AccessLevel.NONE)
private Boolean XXX;
public Boolean isXXX() {
return XXX;
}
}
(そして、少なくとも、それはquiteではなく、最初からLombokを使用していないかのように冗長です!)
フィールドを_Boolean X
_から_boolean X
_に切り替えると、lombokはgetter isX()
メソッドを生成するのではないかと思います。
質問は古いことは知っていますが、今後の参考のために残しておきます。
クラスでゲッター/セッターをオーバーライドするには、2つのオプションがあります。
1つは 最初のオプション応答 からの回答です
もう1つのオプションは、getter/setterメソッドを単純に定義することで、lombokは指定されたメソッドを自動的に生成しません。
私はそれを自分でテストし、うまくいくようです:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductResponse {
private UUID id;
private String supplierId;
private String sku;
private String name;
private String brand;
private String imgUrl;
private String description;
private BigDecimal price;
private Float quantity;
private String unit;
//@Getter(AccessLevel.NONE) //This means @Data will not produce a getter for this field so have to explicitly define it
private Set<ProductTag> tags;
//Here we override @Data getter with a different getter (return is different type)
public List<UUID> getTags() {
return tags.stream().map(ProductTag::getId).collect(Collectors.toList());
}
}
また、開発チームのコメントからの参照もあります。 Lombokの開発者コメント
私の例では、Collection
タイプに「オーバーライド」機能を使用していますが、これはBoolean
などの他のタイプにも使用できます。
ブールフィールドの名前は何ですか? lombok doc に従って:
デフォルトのゲッターは単にフィールドを返すだけで、フィールドの名前がfooの場合はgetFooという名前になります(フィールドのタイプがブール型の場合はisFoo)
lombokは、ブールフィールドにisXXXという名前のゲッターを生成します