我的一个 POJO 有一个布尔对象字段以允许数据库中的 NULLS(要求)。是否可以在类级别使用 @Data Lombok 注释,但覆盖布尔字段的 getter?它生成的默认值是布尔字段的 getXXX 方法。我希望将其覆盖为 isXXX()?
谢谢,
稻田
这有点冗长,但您可以提供自己的isXXX
,然后AccessLevel.NONE
用来告诉 Lombok 不要生成getXXX
:
@Data
public class OneOfPaddysPojos {
// ... other fields ...
@Getter(AccessLevel.NONE)
private Boolean XXX;
public Boolean isXXX() {
return XXX;
}
}
(嘿,至少它不像你一开始就没有使用 Lombok 那样冗长!)
我认为,如果您将字段从Boolean X
to切换到,则boolean X
lombok 会生成一个 getterisX()
方法。
我知道这个问题很老,但我会把这个留作将来参考。
您有两个选项可以覆盖班级中的 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
您的情况。
布尔字段的名称是什么?根据龙目岛文档:
默认的 getter 只是简单地返回该字段,如果该字段被称为 foo 则命名为 getFoo (如果该字段的类型为布尔型,则为 isFoo )
lombok 将为您的布尔字段生成名称为 isXXX 的 getter
从龙目岛文档:
您始终可以使用特殊的 AccessLevel.NONE 访问级别手动禁用任何字段的 getter/setter 生成。这使您可以覆盖类上的@Getter、@Setter 或@Data 注释的行为。