我的一个POJO有一个布尔对象字段,允许在数据库中使用NULLS(一个要求)。是否可以在类级别使用@Data Lombok批注,但是覆盖布尔字段的getter?它生成的默认值是布尔字段的getXXX方法。我希望将其覆盖为isXXX()?
谢谢,
稻谷
答案 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。
的答案另一个选项是简单地定义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批注的行为。