Lombok !
爱它的人爱的要死,觉得它简直就是先进生产力的代表;讨厌它的人讨厌的要死,觉得它简直就是邪恶世界的轴心。今天松哥也小心翼翼的来和大家聊一聊这个话题:Java 开发中,到底该不该用 Lombok?
Lombok 简介
Lombok 并不是一个新的项目,相反,它已经有了一段并不算短的历史了,但是关于 Lombok 的争议一直就没有停止过,我们先来看看它是什么东西?
根据 Lombok 官网的介绍:
Lombok 是一个 java 库,可以自动插入编辑器并构建工具,为我们的 java 增添色彩,让开发者告别繁杂的 getter/setter 以及 equals 等方法,一个注解就可以使我们的类具有一个功能齐全的构建器。
咋一看,还是挺诱人的,我相信大家做 Java 开发对于样板化的代码 getter/setter 早已经不厌其烦,虽然可以使用开发工具自动生成,可是看那一大堆代码还是觉得有点烦,看到有人推荐 Kotlin,Kotlin 做 Android 还行,代替 Java 做企业级应用?呵呵。 Lombok 则可以帮助开发者简化样板代码,举一个简单的例子,原来你的一个 Java Bean 可能是这样:
public class User{ private String name; private Long id; private String address; //getter/setter/toString/hashCode。。。 }
使用了 Lombok 之后,你的 Java Bean 就可以简化成这样了:
@Data public class User{ private String name; private Long id; private String address; }
添加一个 @Data 注解,项目在编译器编译时通过操作 AST (抽象语法树) 来自动生成 getter/setter 、toString 、hashCode 等方法,利用这一特性,甚至可以像 JavaScript 一样不用显式声明变量类型:
val list = new ArrayList<User>(); list.add(new User());
的代码最终会被编译成:
final ArrayList<User></User> list = new ArrayList<User>(); list.add(new User());
等等还有很多其他的语法糖,像 @Cleanup、@Builder 等都是简化代码的能手,我这里只是随便的举两个例子。
因为这些代码都是编译之后才有的,所以开发者如果需要在 Java 代码中调用某一个对象的 get 方法(或者其他自动生成的方法),还需要引入一些开发工具的插件,才可以解决这个问题,这个我就不细说了,大伙有兴趣可以自行搜索了解下。
事情就是这么个事情,工具就是这么个工具,那么开发中到底用不用呢?
用还是不用?
支持使用 Lombok 的小伙伴,主要是觉得:
- 使用了 Lombok 之后,代码干净整洁
- 开发人员的工作量大大降低
- 在一些刚立项的项目中,Bean 反复变化,要不停的修改了代码,要是有了 Lombok ,就不必这么麻烦了
- 这是先进生产力的代表,不会用的都是太菜
反对 Lombok 的小伙伴当然也有自己的看法:
- 这是歪门邪道,扰乱人的思路
- 调试不便
- 开发工具本来就可以一键生成
- 一个第三方插件不应该改变 JAVA 语法
如果你在论坛上搜一下对于这个插件的看法,感觉世界大战都快要爆发了!