Lombok 的fields问题

本文探讨了Lombok在处理布尔类型字段时,setter和getter的生成规则,特别是对于以is开头的字段。当有多个字段仅需要一组getter/setter时,Lombok的处理方式以及由此引发的问题。在某些情况下,Lombok不会生成预期的方法,原因是field名的冲突。解决方案是为这些特殊字段手动编写setter和getter。官方文档和社区讨论建议,由于兼容性问题,Lombok选择保持现状。

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.

如果已经存在具有相同名称(不区分大小写)和相同参数计数的方法,则不会生成任何方法

看过一篇别人讲的博客,很好的解释了这个问题的背景以及原因和改善意见,我就简单描述下,不做过度赘述

  1. 主流IDE 和 lombok 的生成规则不一样
  2. 官方的态度是,由于无论怎么做都会与另一半的内容不兼容,所以不妨坚持目前已经支持的一半,也就是不做修改,并且不考虑增加属性,或是引入新的注解
  3. 最终问题的修复也很简单 就是给只有大小写不同的fields显式的编写setter/getter方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值