sneaky visit( 五 )


当这些代码写好之后 , 我们就可以新增一个 Person 类来试一下我们自定义的 @MyGetter 功能了 , 代码如下:
@MyGetterpublic class Person {private String name;}2.使用自定义的注解处理器编译代码上面的所有流程执行完成之后 , 我们就可以编译代码测试效果了 。首先 , 我们先进入代码的根目录 , 执行以下三条命令 。
进入的根目录如下:

sneaky visit

文章插图

① 使用 tools.jar 编译自定义的注解器


javac -cp $JAVA_HOME/lib/tools.jar MyGetter* -d .
注意:命令最后面有一个“.”表示当前文件夹 。
② 使用自定义注解器 , 编译 Person 类
javac -processor com.example.lombok.MyGetterProcessor Person.java
③ 查看 Person 源码
javap -p Person.class
源码文件如下:
sneaky visit

文章插图



可以看到我们自定义的 getName() 方法已经成功生成了 , 到这里简易版的 Lombok 就大功告成了 。
Lombok 优缺点Lombok 的优点很明显 , 它可以让我们写更少的代码 , 节约了开发时间 , 并且让代码看起来更优雅 , 它的缺点有以下几个 。
缺点1: 降低了可调试性Lombok 会帮我们自动生成很多代码 , 但这些代码是在编译期生成的 , 因此在开发和调试阶段这些代码可能是“丢失的” , 这就给调试代码带来了很大的不便 。
缺点2:可能会有兼容性问题Lombok 对于代码有很强的侵入性 , 加上现在 JDK 版本升级比较快 , 每半年发布一个版本 , 而 Lombok 又属于第三方项目 , 并且由开源团队维护 , 因此就没有办法保证版本的兼容性和迭代的速度 , 进而可能会产生版本不兼容的情况 。
缺点3:可能会坑到队友尤其对于组人来的新人可能影响更大 , 假如这个之前没用过 Lombok , 当他把代码拉下来之后 , 因为没有安装 Lombok 的插件 , 在编译项目时 , 就会提示找不到方法等错误信息 , 导致项目编译失败 , 进而影响了团结成员之间的协作 。
缺点4:破坏了封装性面向对象封装的定义是:通过访问权限控制 , 隐藏内部数据 , 外部仅能通过类提供的有限的接口访问和修改内部数据 。
也就是说 , 我们不应该无脑的使用 Lombok 对外暴露所有字段的 Getter/Setter 方法 , 因为有些字段在某些情况下是不允许直接修改的 , 比如购物车中的商品数量 , 它直接影响了购物详情和总价 , 因此在修改的时候应该提供统一的方法 , 进行关联修改 , 而不是给每个字段添加访问和修改的方法 。
小结本文我们介绍了 Lombok 的使用以及执行原理 , 它是通过 JDK 6 实现的 JSR 269: Pluggable Annotation Processing API (编译期的注解处理器)  , 在编译期时把 Lombok 的注解转换为 Java 的常规方法的 , 我们可以通过继承 AbstractProcessor 类 , 重写它的 init() 和 process() 方法 , 实现一个简易版的 Lombok 。但同时 Lombok 也存在这一些使用上的缺点 , 比如:降低了可调试性、可能会有兼容性等问题 , 因此我们在使用时要根据自己的业务场景和实际情况 , 来选择要不要使用 Lombok , 以及应该如何使用 Lombok 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。