最近发现后端开发中,用到了一款第三方插件Lombok。利器啊。真可以减少代码量。
Setup
- 在每个build.gradle都加上这么两句
dependencies {
...
//Lombok //加上下面两行
compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor 'org.projectlombok:lombok:1.18.8'
...
}
- 在App的build.gradle中加上一句
android {
project.ext.setDefaultConfig project
defaultConfig {
...
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } } //加上这一行
...
}
}
说明文档
最详细的在这里:javadoc
@Data
注解在类上;
所有方法的集合!!!
- @ToString,
- @EqualsAndHashCode,
- @RequiredArgsConstructor,
- 所有字段的@Getter,
- 所有非final字段的@Setter!
@Getter/@Setter
注解在属性上;
提供Getter和Setter方法。
不会重写已有的方法:例如变量foo。public int getFoo() {return foo;}
@NonNull
如果给参数加个这个注解 参数为null会抛出空指针异常
@Cleanup
声明后,会自动关闭流。即自动调用close().
@ToString
注解在类上;为类提供toString方法(可以添加排除和依赖)
@EqualsAndHashCode
注解在类上;自动生成hashCode和equals代码。轻松解决equality问题。
@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
注解在类上;按顺序生成构造函数;
- NoArgsConstructor为类提供一个无参的构造方法
- RequiredArgsConstructor生成一个包含常量,和标识了NotNull的变量的构造方法。生成的构造方法是私有的private
- AllArgsConstructor生成一个包含所有变量的构造方法
@Value
注解和@Data类似,区别在于它会把所有成员变量默认定义为private final修饰,并且不会生成set方法。
@Builder
被注解的类加个构造者模式
@SneakyThrows
等同于try/catch 捕获异常
@Synchronized
加个同步锁
@Getter(lazy=true)
lazy版的getter annotation,会提高代码效率,同时由Lombok帮助你管理线程安全问题,大可放心。
@Log
注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
val
局部final变量
var
非final的局部变量
Lombok的优缺点
- 优点:
- 通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
- 代码变得简洁,不用过多的去关注相应的方法
- 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等
- 缺点:
- 不支持多种参数构造器的重载
有人说,虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度。
这一点值得商榷!在我看来,Lombok减少了代码量,这本身就是双刃剑。代码量少了,可读性就会适当下降。然而,这些getter/setter都是极为简单的方法。真的有下降多少吗?不见得。
在我看来,Lombok利大于弊。用用看。