写点什么

收藏手册:该不该用 Lombok?15 个常用注解全解析

发布于: 2020 年 09 月 21 日
收藏手册:该不该用Lombok?15个常用注解全解析

前几天看到一篇文章介绍说,新来的技术总监一来就定了很多规范,其中有一条让他很不解,就是强制不使用 Lombok,也没说明是什么原因。这样子的文章的真实性有待考证,但是小编认为,每一个东西都要好坏,火能烧人,也能煮东西吃,填饱你肚子,关键看你怎么用。


在评价一个东西的好坏之前,需要先去了解他,而不是跟风一样别人说啥你就说啥,到头来人浮于事,天天满满负能量,肚子里的墨水却不见长进,今天咱们不讨论 lombok 好不好用,来看看 Lombok 的常用注解,无论用不用,技多不压身。



Data

作用范围:作用于类上。


作用说明:为当前类自动生成 toString(),equal(),hashCode(),全参构造函数,所有属性的 set 方式,get 方式。


注意事项:此类自动生成的东西比较多,有特殊需求的时候建议按需填充注解


Setter

作用范围:作用于类上,作用于属性上


作用说明:当作用于类上的时候,自动为该类的所有属性提供 set 方法;当作用于属性上的时候,为当前属性提供 set 方式


注意事项:这里的属性只会是非静态成员变量才会生效,例如我们进行序列后实现 Serializable 后自动生成的 serialVersionUID,是不会生效的。


Getter

作用范围:作用于类上,作用于属性上


作用说明:当作用于类上的时候,自动为该类的所有属性提供 get 方法;当作用于属性上的时候,为当前属性提供 get 方式


注意事项:这里的属性只会是非静态成员变量才会生效,例如我们进行序列后实现 Serializable 后自动生成的 serialVersionUID,是不会生效的。



ToString

作用范围:作用于类上


作用说明:自动为该类实现 toString 方法


注意事项:在一些类中,我们经常会定义公共类并让子类去继承,此时如果我们生成 toString 方法的话,是不会生成父类的属性,需要在 toString 设置 callSuper=true


@ToString(callSuper=true)
复制代码


EqualsAndHashCode

作用范围:作用于类上


作用说明:给当前类对象的属性自动生成 hashCode(),equals()方法。


注意事项:跟 ToString 类似


AllArgsConstructor

作用范围:作用于类上


作用说明:给当前类生成全参数的构造函数


注意事项:暂无发现


RequiredArgsConstructor

作用范围:作用于类上


作用说明:生成带参或者不带参的构造函数


注意实现:目前小编没有遇到过,但是从一篇文章看到过有一定几率引起 spring 循环引用,文章地址为,有兴趣的同学可以自己实验一下


h ttps://my.oschina.net/yejunxi/blog/2209101
复制代码


NoArgsConstructor

作用范围:作用于类上


作用说明:生成不带参的构造函数


注意实现:目前没遇到过,挺好用的



Log 日志注解

作用范围:类上


作用说明:这里 Log 日志就非常多,他可以根据不同的日志框架选择不同的日志注解,在下图中我罗列出目前 Lombok 常用的日志注解。



注意实现:目前小编没有遇到过


NonNull

作用范围:作用在方法上


作用说明:用于检测空值参数,避免空指针


注意实现:注意别跟 java 或者 hibernate 里面的 NotNull 混淆,他们一般用来做入参校验


Cleanup

作用范围:作用于局部变量上


作用说明:经常操作文件或者输入输出流的同学可能会比较烦的就是需要手写 close 方法,用这个注解可以手动帮你生成 close 方法,不用担心忘记 close 了


public static void main(String[] args) throws IOException {File file = new File(args[1]);@Cleanup FileWriter fw = new FileWriter(file);@Cleanup BufferedWriter br = new BufferedWriter(fw);}


注意事项:很好用注解,目前需要注意的是关闭的方法默认是 close,可以自定义关闭方法


@Target(ElementType.LOCAL_VARIABLE)@Retention(RetentionPolicy.SOURCE)public @interface Cleanup {/** @return The name of the method that cleans up the resource. By default, 'close'. The method must not have any parameters. */String value() default "close";}


Builder

作用范围:作用于类上


作用说明:添加一个构造者模式,构造者模式可以参考


h ttps://www.cnblogs.com/aspirant/p/11753644.html


注意事项:现在小编经常使用此注解,都懒得去 new 一个对象


Synchronized

作用范围:注解于方法上


作用说明:此注解用在方法上,会自动锁住代码,跟 synchronized 类似


注意事项:注意性能问题,毕竟采用的是 synchronized


SneakyThrows

作用范围:作用于方法上


作用说明:等同于 try/catch,自动包含住代码块,生成 try/catch,一般配合全局异常使用


注意事项:暂无


Value

作用范围:作用于类上


作用说明:与 Data 差不多,但是会把所有的变量变成 private final,同时不会生成 set 方法,毕竟你想啊,都是 final 了,还生成啥 get 方法


注意事项:小编很少用,还是经常用 Data 或者根据需要进行注解拆分。



总结

一个东西好不好用还是要根据实际情况来做定夺,无论别人怎么说,先了解了,熟悉了,再来根据自己的实际情况去做定夺。


发布于: 2020 年 09 月 21 日阅读数: 60
用户头像

喜欢奋战在一线的架构师 2020.09.21 加入

专注架构,微服务,机器学习,JAVA,Python等领域教程,欢迎关注

评论

发布
暂无评论
收藏手册:该不该用Lombok?15个常用注解全解析