我的一个POJO有一个Boolean对象字段,以允许在数据库中使用NULLS(这是一个要求)。是否可以在类级别上使用@Data Lombok注释,但覆盖布尔字段的getter方法?它生成的默认方法是用于布尔字段的getXXX方法。我希望将其覆盖为isXXX()方法。
谢谢,
Paddy
我的一个POJO有一个Boolean对象字段,以允许在数据库中使用NULLS(这是一个要求)。是否可以在类级别上使用@Data Lombok注释,但覆盖布尔字段的getter方法?它生成的默认方法是用于布尔字段的getXXX方法。我希望将其覆盖为isXXX()方法。
谢谢,
Paddy
虽然有些冗长,但您可以提供自己的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
切换到 boolean X
,那么 lombok 会生成一个名为 isX()
的 getter 方法。
NULL
还是0
。这就是楼主提出问题的原因。 - Priidu Neemre我知道这个问题很久了,但我会把这留做将来参考。
你有两个选项来覆盖类中的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的开发人员评论
在我的示例中,我正在使用“override”功能来处理集合类型,但是这也可以用于你的任何其他类型,比如你的Boolean
。
isXXX()
和getXXX()
时,OP问如何解决。请注意,这里的“起作用”指的是自动生成getter方法功能正常,与自定义getter方法具有相同的操作效果。 - Sasha Shpotaboolean
类型的字段的getter默认会被命名为isXXX()
;问题在于他/她希望对于一个Boolean
类型的字段也使用这种命名规范(Boolean
是boolean
对象包装类型,就像Integer
对应于int
一样)。你提供的链接页面实际上明确指出了这一点:“任何变体的boolean
都不会使用is
前缀而不是get
前缀;例如,返回java.lang.Boolean
会导致使用get
前缀,而不是is
前缀。” - ruakh来自Lombok 文档:
您始终可以使用特殊的AccessLevel.NONE访问级别手动禁用任何字段的getter/setter生成。这使您可以覆盖类上的@Getter、@Setter或@Data注释的行为。