收藏手册:该不该用 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
EqualsAndHashCode
作用范围:作用于类上
作用说明:给当前类对象的属性自动生成 hashCode(),equals()方法。
注意事项:跟 ToString 类似
AllArgsConstructor
作用范围:作用于类上
作用说明:给当前类生成全参数的构造函数
注意事项:暂无发现
RequiredArgsConstructor
作用范围:作用于类上
作用说明:生成带参或者不带参的构造函数
注意实现:目前小编没有遇到过,但是从一篇文章看到过有一定几率引起 spring 循环引用,文章地址为,有兴趣的同学可以自己实验一下
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 或者根据需要进行注解拆分。
总结
一个东西好不好用还是要根据实际情况来做定夺,无论别人怎么说,先了解了,熟悉了,再来根据自己的实际情况去做定夺。
版权声明: 本文为 InfoQ 作者【互联网应用架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/0109c3d950085ea22bd01b1e2】。文章转载请联系作者。
评论