简单聊聊使用lombok 的争议

大家好,我是G探险者。

项目里,因为我使用了Lombok插件,然后代码走查的时候被领导点名了。

我心想,这么好用的插件,为啥不推广呢,整天写那些烦人的setter,getter方法就不嫌烦么?

领导既然不让用,自然有他的道理。

于是我查了一番关于lombok的一些绯闻。就有了这篇文章。

首先呢,Lombok 是一个在 Java 项目中广泛使用的库,旨在通过注解自动生成代码,如 getter 和 setter 方法,以减少重复代码并提高开发效率。然而,Lombok 的使用也带来了一些挑战和争议,特别是关于代码的可读性和与 Java Bean 规范的兼容性。

Lombok 基本使用

示例代码

不使用 Lombok:

java 复制代码
public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 其他 getter 和 setter
}

使用 Lombok:

java 复制代码
import lombok.Data;

@Data
public class User {
    private String name;
    private int age;
    // 无需显式编写 getter 和 setter
}

Lombok 的争议

  1. 代码可读性和透明度:Lombok 自动生成的代码在源代码中不直接可见,可能对新开发者造成困扰。
  2. 工具和 IDE 支持:需要特定的插件或配置,可能引起兼容性问题。
  3. 与 Java Bean 规范的兼容性:Lombok 在处理属性命名时可能与 Java Bean 规范产生冲突,特别是在属性名以大写字母开头的情况。

下面我就列举一个例子进行说明。

属性命名的例子

假设有这么一个属性,aName;

标准 Java Bean 规范下:

  • 属性 aName 的setter getter 方法应为 setaName() getaName()
  • 但是 Lombok 可能生成 getAName()

这是因为Lombok 在生成getter和setter方法时,将属性名的首字母也大写,即使它是小写的。所以对于aName属性,Lombok生成的方法可能是getAName()和setAName()。

在处理JSON到Java对象的映射时,JSON解析库(如Jackson或Gson)会尝试根据Java Bean规范匹配JSON键和Java对象的属性。它通常期望属性名的首字母在getter和setter方法中是小写的。因此,如果JSON键为"aName",解析库会寻找setaName()方法。

所以,当你使用Lombok的@Data注解,且Lombok生成的setter方法为setAName()时,JSON解析库可能找不到匹配的方法来设置aName属性,因为它寻找的是setaName()。

这种差异可能在 JSON 到 Java 对象的映射中引起问题。

Java Bean 命名规范

根据 Java Bean 规范,属性名应遵循驼峰式命名法:

  • 单个单词的属性名应全部小写。
  • 多个单词组成的属性名每个单词的首字母通常大写。

结论

Lombok 是一个有用的工具,可以提高编码效率并减少冗余代码。但是,在使用它时,团队需要考虑其对代码可读性、维护性和与 Java Bean 规范的兼容性。在决定是否使用 Lombok 时,项目的具体需求和团队的偏好应该是主要的考虑因素。

相关推荐
方白羽2 分钟前
Android多层嵌套RecyclerView滚动
android·java·kotlin
每天进步一点_JL10 分钟前
事务与消息中间件:分布式系统中的可见性边界问题
分布式·后端
bcbnb18 分钟前
Ipa Guard 集成到 CICD 流程,让 iOS 加固进入自动化时代的完整工程方案
后端
该用户已不存在28 分钟前
2025 年 8 款最佳远程协作工具
前端·后端·远程工作
uup38 分钟前
Java 中 ArrayList 线程安全问题
java
uup39 分钟前
Java 中日期格式化的潜在问题
java
云渠道商yunshuguoji42 分钟前
阿里云渠道商:阿里云服务器出问题如何处理?
后端
老华带你飞1 小时前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·海鲜商城购物系统
2401_837088501 小时前
Redisson的multilock原理
java·开发语言
今天你TLE了吗1 小时前
Stream流学习总结
java·学习