Lombok 的fields问题
布尔类型is开头的 setter 和 getter
- 基本类型
- 包装类型
setter
基本类型:setXxx(boolean)
包装类型:setIsXxx(Boolean)

getter
基本类型:isXxx()
包装类型:getIsXxx()


多个Field只生成一组getter/setter
背景:之前业务字段xxxLog 使用jackson序列化为xxx_log,可能由于当时没定义准确,需要保证之前场景ok 并新场景下发xxxlog 序列化为 xxxlog所以增加对应一个字段如下来适配此场景(兼容bug)
@Data
@Builder
public class LookDemo {
private String xxxLog;
private String xxxlog;
public static void main(String[] args) {
LookDemo lookDemo = LookDemo.builder()
.xxxLog("qwe")
.xxxlog("asd").build();
System.out.println(lookDemo.getXxxLog());
System.out.println(lookDemo.getXxxlog());
System.out.println(lookDemo);
}
}
通过使用javap 查看编译后的.class文件发现上述情况只生成了一组setter/getter方法

通过查阅 lombok documentation,可以确定确实是 field name 的原因
https://projectlombok.org/features/GetterSetter
No method is generated if any method already exists with the same name (case insensitive) and same parameter count.
如果已经存在具有相同名称(不区分大小写)和相同参数计数的方法,则不会生成任何方法
看过一篇别人讲的博客,很好的解释了这个问题的背景以及原因和改善意见,我就简单描述下,不做过度赘述
- 主流IDE 和 lombok 的生成规则不一样
- 官方的态度是,由于无论怎么做都会与另一半的内容不兼容,所以不妨坚持目前已经支持的一半,也就是不做修改,并且不考虑增加属性,或是引入新的注解
- 最终问题的修复也很简单 就是给只有大小写不同的fields显式的编写setter/getter方法
本文探讨了Lombok在处理布尔类型字段时,setter和getter的生成规则,特别是对于以is开头的字段。当有多个字段仅需要一组getter/setter时,Lombok的处理方式以及由此引发的问题。在某些情况下,Lombok不会生成预期的方法,原因是field名的冲突。解决方案是为这些特殊字段手动编写setter和getter。官方文档和社区讨论建议,由于兼容性问题,Lombok选择保持现状。
1849

被折叠的 条评论
为什么被折叠?



