70


我的一个 POJO 有一个布尔对象字段以允许数据库中的 NULLS(要求)。是否可以在类级别使用 @Data Lombok 注释,但覆盖布尔字段的 getter?它生成的默认值是布尔字段的 getXXX 方法。我希望将其覆盖为 isXXX()?

谢谢,
稻田

4

5 回答 5

121

这有点冗长,但您可以提供自己的isXXX,然后AccessLevel.NONE用来告诉 Lombok 不要生成getXXX

@Data
public class OneOfPaddysPojos {

    // ... other fields ...

    @Getter(AccessLevel.NONE)
    private Boolean XXX;

    public Boolean isXXX() {
        return XXX;
    }
}

(嘿,至少它不像你一开始就没有使用 Lombok 那样冗长!

于 2013-08-09T04:07:35.103 回答
17

我认为,如果您将字段从Boolean Xto切换到,则boolean Xlombok 会生成一个 getterisX()方法。

于 2016-03-18T14:36:44.853 回答
8

我知道这个问题很老,但我会把这个留作将来参考。

您有两个选项可以覆盖班级中的 Getter/Setter。

一个是第一个选项响应的答案

另一种选择是简单地定义 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您的情况。

于 2018-05-02T08:41:56.493 回答
2

布尔字段的名称是什么?根据龙目岛文档

默认的 getter 只是简单地返回该字段,如果该字段被称为 foo 则命名为 getFoo (如果该字段的类型为布尔型,则为 isFoo )

lombok 将为您的布尔字段生成名称为 isXXX 的 getter

于 2013-08-09T03:54:29.457 回答
1

从龙目岛文档

您始终可以使用特殊的 AccessLevel.NONE 访问级别手动禁用任何字段的 getter/setter 生成。这使您可以覆盖类上的@Getter、@Setter 或@Data 注释的行为。

于 2020-01-15T08:38:55.847 回答