简单聊聊使用lombok 的争议

大家好,我是G探险者。

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

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

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

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

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

Lombok 基本使用

示例代码

不使用 Lombok:

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:

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 时,项目的具体需求和团队的偏好应该是主要的考虑因素。

相关推荐

  1. 简单聊聊Rust元组

    2023-12-16 23:26:03       21 阅读
  2. C语言中goto语句:使用争议与最佳实践

    2023-12-16 23:26:03       34 阅读
  3. lombok

    2023-12-16 23:26:03       12 阅读
  4. 简单聊聊Vue

    2023-12-16 23:26:03       10 阅读
  5. 简单聊聊,聚合支付+分账系统体系运用

    2023-12-16 23:26:03       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 23:26:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 23:26:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 23:26:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 23:26:03       20 阅读

热门阅读

  1. 【设计模式】之单例模式

    2023-12-16 23:26:03       38 阅读
  2. 华为云CodeArts Deploy常见问答汇总

    2023-12-16 23:26:03       36 阅读
  3. Docker常用管理命令

    2023-12-16 23:26:03       29 阅读
  4. 如何解决Redis热Key问题?

    2023-12-16 23:26:03       46 阅读
  5. MATLAB 数据保存为 txt

    2023-12-16 23:26:03       71 阅读
  6. 前端工程化面试总结

    2023-12-16 23:26:03       40 阅读
  7. 国家数据局提出数据要素十大应用场景

    2023-12-16 23:26:03       43 阅读
  8. IvorySQL新增命令及有关配置参数介绍

    2023-12-16 23:26:03       36 阅读
  9. VR情景仿真教学在农业课堂中的应用

    2023-12-16 23:26:03       46 阅读
  10. Vue将File二进制文件转换为base64格式

    2023-12-16 23:26:03       40 阅读