Lombok如何为Boolean对象字段自定义getter?

时间:2013-08-09 03:33:49

标签: lombok


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

谢谢,
稻谷

5 个答案:

答案 0 :(得分:56)

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

@Data
public class OneOfPaddysPojos {

    // ... other fields ...

    @Getter(AccessLevel.NONE) private Boolean XXX;

    public Boolean isXXX() {
        return XXX;
    }
}

(嘿,至少它不像相当一样冗长,好像你没有使用龙目岛开始!)

答案 1 :(得分:13)

我认为,如果您将字段从Boolean X切换为boolean X,则lombok会生成getter isX()方法。

答案 2 :(得分:1)

布尔字段的名称是什么?根据{{​​3}}:

  

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

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

答案 3 :(得分:1)

我知道这个问题已经过时了,但我会将其留待将来参考。

您可以通过两种方式覆盖班级中的Getter / Setter。

一个是First Option response

的答案

另一个选项是简单地定义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's developer comment

在我的示例中,我使用Collection类型的“覆盖”功能,但在您的情况下,此功能可用于Boolean之类的任何其他类型。

答案 4 :(得分:0)

来自龙目岛documentation

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

相关问题