专栏名称: Java专栏
一个Java、Python、数据库、中间件、业内资讯、面试、学习资源等干货的知识分享社区。
目录
相关文章推荐
51好读  ›  专栏  ›  Java专栏

为什么有些公司不让用 Lombok ?

Java专栏  · 公众号  ·  · 2020-10-12 12:20

正文

注意 文末有最新 Java实战 项目 面试题


不得不承认,Lombok 是一个很不错的 Java 库,它可以让你在少写代码的同时耍耍酷,简单的几个注解,就可以干掉一大片模板代码。 但是,所有的源代码很多时候是用来阅读的,只有很少的时间是用来执行的 (你可以细品这句话)。

接下来,我将用几个大家耳熟能详的场景,重演我们是如何掉入 Lombok 的戏法陷阱。

# 爱的开始,恨的起源


面对 Lombok 提供的诸多 “神走位”,你并不会介意在 IDE 上新增一个插件。对于 IntelliJ IDEA 玩家而言,只需搜索 “Lombok Plugin” 便可找到这款神器并安装上它。爱上 Lombok 从安装 Lombok 插件开始,恨也从此萌芽。

没使用 Lombok 之前,我们的源代码看起来是这一的:
public class MyObject{    private Long id;    private String name;    private int age;    private int gender;
public Long getId(){ return id; } public void setId(Long id){ this.id = id; } public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getAge(){ return age; } public void setAge(int age){ this.age = age; } public int getGender(){ return gender; } public void setGender(int gender){ this.gender = gender; }
@Override public boolean equals(Object o){ if(this == o){ return true; } if(o == null || getClass() != o.getClass()){ return false; } MyObject obj = (MyObject) o; return age = obj.age && gender = obj.gender && Objects.equals(id,obj.id) && Objects.queals(name,obj.name); }
@Override public int hashCode(){ return Objects.hash(id,name,age,gender); }
@Override public String toString(){ return "MyObject{"+ "id="+id+ "name="+name+ "age="+age+ "gender="+gander+ "}"; }}

每个 JavaBean 都会充斥着如上述 getter,setter,equals,hashCode 和 toString 的模板代码,这看起来像一个偏胖的人(不得不承认 Java 是一个有缺陷的编程语言)。

当我们安装好 Lombok 插件后,IDE 便可以识别其酷炫的注解,使用 Lombok 的 @Getter 和 @Setter 注解后,代码会像下面这样看起来很苗条:
@Getter@Setterpublic class MyObject{    private Long id;    private String name;    private int age;    private int gender;
@Override public boolean equals(Object o){ if(this == o){ return true; } if(o == null || getClass() != o.getClass()){ return false; } MyObject obj = (MyObject) o; return age = obj.age && gender = obj.gender && Objects.equals(id,obj.id) && Objects.queals(name,obj.name); }
@Override public int hashCode(){ return Objects.hash(id,name,age,gender); }
@Override public String toString(){ return "MyObject{"+ "id="+id+ "name="+name+ "age="+age+ "gender="+gander+ "}"; }}

现在的代码是否看起来爽多了?但这还不是最爽的时候。

既然其他方法都替换掉了,那把 toString 方法也一起拿掉吧。如你所愿,可以使用 @ToString 注解去掉对于的方法:
@Getter@Setter@EqualsAndHashCodepublic class MyObject{    private Long id;    private






请到「今天看啥」查看全文