lombok使用过程中出现的问题

lombok使用过程中出现的问题

1.lombok简介

lombok相信大家都使用过,使得java代码简洁,提高开发人员的开发效率。使用方法不在赘述,网上资料很多,引入也很方便,下面进入正题!

2.lombok注解

@Data Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode}.
本人在开发中使用的最多的注解就是@Data,因为它涵盖了上述的所有注解。下面是一段简单的代码。
package com.xes.columbus.interfacelog.entity;

import lombok.Data;

@Data
public class LombokTest {

    private Integer id;

    private String lombokTest;

    private String lomboktest;
}

按照@Data的解释可以自动生成各个字段的setter和getter方法,而我们看idea编辑器中的Structure,如下图:
在这里插入图片描述
接下来就是见证奇迹的时刻了,我们创建一个LombokBug的test类,创建一个Lombok对象,再打印出它的ID,lombokBug,lombokbug字段的值。

// An highlighted block
package com.xes.columbus.interfacelog.entity;


public class LombokBugTest {

    public static void main(String[] args) {
        LombokBug lombokBug = new LombokBug(1,"大bug","小bug");
        //打印id
        System.out.println(lombokBug.getId());
        //打印lombokBug(大bug)
        System.out.println(lombokBug.getLombokBug());
        //打印lombokbug(小bug)
        System.out.println(lombokBug.getLombokbug());
    }

}

如此简单的一个程序会出现问题么?但是在编译的时候报错了!
在这里插入图片描述
可以很清晰的看到,程序找不到getLombokbug()方法,同理也找不到setLombokbug()方法,@Data没有起作用么?那么getId()和getLombokBug()生成了吗?答案是肯定的,就是没有生成getLombokbug()方法,而且idea对于这个方法有提示并且没有飘红。在这里插入图片描述
问题的关键就在于我们命名的字段中存在两个相似的变量,lombokBug和lombokbug,当然正常情况下我们不会这样命名,但业务中就存在这样的字段,而当我们使用对象映射工具时(如fastjson)将jsonObject映射为存在歧义字段的类时就会出现映射为null的情况。java语言不是严格区分大小写的吗?所以lombok在这块出现了个小bug。

3.解决方案

1.可以不使用Lombok的@Data注解,自己手动生成setter和getter方法
2.为了代码的简洁性,可以使用@Data注解,但对于有歧义的字段需要手段生成setter和getter方法,我采用的第二种方法,因为业务中类中字段比较多。

package com.xes.columbus.interfacelog.entity;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class LombokBug {

    private Integer id;

    private String lombokBug;

    private String lombokbug;

    public String getLombokbug() {
        return lombokbug;
    }

    public void setLombokbug(String lombokbug) {
        this.lombokbug = lombokbug;
    }

    public String getLombokBug() {
        return lombokBug;
    }

    public void setLombokBug(String lombokBug) {
        this.lombokBug = lombokBug;
    }
}

测试类编译也没有报错

package com.xes.columbus.interfacelog.entity;


public class LombokBugTest {

    public static void main(String[] args) {
        LombokBug lombokBug = new LombokBug(1,"大bug","小bug");
        //打印id
        System.out.println(lombokBug.getId());
        //打印lombokBug(大bug)
        System.out.println(lombokBug.getLombokBug());
        //打印lombokbug(小bug)
        System.out.println(lombokBug.getLombokbug());
    }
}

运行结果
在这里插入图片描述

4.lombok源码分析

github上已经有人反馈了,但是作者认为这是个习惯问题,不能在一个类文件中命名只有字母大小写不同的相同的名字。
作者回复
最后还是希望大家在写程序时更加规范命名方式

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值