前言
在一个GitHub
项目发现它使用了Lombok
这个工具。没见过所以了解一下, 但是发现还是不太好用, 于是摒弃之。但好歹记录一下。
介绍
Lombok是一个可以大量减少代码的工具, 通过Pluggable Annotation Processing API
的方式解析注解, 在编译期为class
文件注入getter
或setter
或toString
等等诸如此类的代码。
准备工作
- 开发工具IDEA
- 在IDEA中安装Lombok Plugin插件
- 导入org.projectlombok.lombok
示例
Lombok
通过注解生效, 官方注解列表
@Getter
@Setter
public class User{
private Long id;
private String name;
}
public class MyTest() {
public static void main(String[] args) {
User user = new User();
System.out.println("自动生成的方法:" + user.getId() + "," + user.getName());
}
}
为什么摒弃它
-
Lombok
具有太强的侵入性 - 失去了封装的意义
具有太强的侵入性
我在第一次接触到到带有Lombok
项目的时候, 编译报错, 虽然我导入了Lombok
的maven
地址, 但是仍然提示找不到getter
方法。
点进去一看, 发现根本没有getter
方法, 只有一个@Getter
注解。
也就是说, 一旦你使用了Lombok
, 所有编译你代码的人都必须使用Lombok
编译, 传染性、侵入性太强
失去了封装的意义
更重要的是, 面向对象。
如果我们只是不想写getter
和setter
方法, 不如就直接将field
设置成public
。
长久的写重复的getter
和setter
方法已经让人不知道为什么要这样写, 只知道大家都是这样写, 以前都是这样写, 所以这样写。
public void setName(String name) {
this.name = name;
}
public void setName(String name) {
switch(name) {
case "admin": this.name = "I am admin:"+name; break;
case "user" : this.name = "I am user:" +name; break;
}
}
第二个setter
方法, 封装了逻辑操作, 和第一个方法不同, 这就是setter
方法的意义。
网友评论