web-dev-qa-db-ja.com

Lombokはブールオブジェクトフィールドのゲッターをカスタマイズする方法は?


POJOの1つには、データベースでNULLを許可するためのブールオブジェクトフィールドがあります(要件)。クラスレベルで@Data Lombokアノテーションを使用しながら、ブール型フィールドのゲッターをオーバーライドすることは可能ですか?生成されるデフォルトは、ブールフィールドのgetXXXメソッドです。 isXXX()としてオーバーライドしたいですか?

おかげで、
パディ

36
Paddy

少し冗長ですが、独自のisXXXを指定し、AccessLevel.NONEを使用してgetXXXを生成しないようにLombokに指示できます。

@Data
public class OneOfPaddysPojos {

    // ... other fields ...

    @Getter(AccessLevel.NONE)
    private Boolean XXX;

    public Boolean isXXX() {
        return XXX;
    }
}

(そして、少なくとも、それはquiteではなく、最初からLombokを使用していないかのように冗長です!)

58
ruakh

フィールドを_Boolean X_から_boolean X_に切り替えると、lombokはgetter isX()メソッドを生成するのではないかと思います。

13
kate

質問は古いことは知っていますが、今後の参考のために残しておきます。

クラスでゲッター/セッターをオーバーライドするには、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などの他のタイプにも使用できます。

1

ブールフィールドの名前は何ですか? lombok doc に従って:

デフォルトのゲッターは単にフィールドを返すだけで、フィールドの名前がfooの場合はgetFooという名前になります(フィールドのタイプがブール型の場合はisFoo)

lombokは、ブールフィールドにisXXXという名前のゲッターを生成します

1
Septem