面对工作中大量重复的,毫无技术含量get()、set()方法,你是不是抱怨过? 那你听说过Lombok吗? 那你知道Lombok还有哪些鲜为人知的秘密吗?
Lombok 简介
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
翻译
Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而使您的Java更加生动有趣。永远不要再写另一个getter或equals方法,通过注解您的类有一个功能全面的生成器,自动化您的日志记录变量等等。
示例
用@Data代替所有成员的getter,setter方法,用@ToString代替toString方法。
@ToString
@Data
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
private User user;
}
Lombok 原理
JSR 269:插件化注解处理API(Pluggable Annotation Processing API)
原理图流程如下:
Lombok 安装
- javac
- 拷贝jar到类路径
- javac -cp lombok.jar ...
- Maven
- pom 引入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
- Intellij IDEA
- 安装Lombok 插件
安装完成后,可以在Structure可以在View -> Tool Windows -> Structure 或者Alt +7中看到下图即安装成功:
Lombok常用注解
@Getter和@Setter
可以放在成员上或者类上来生成getter 和setter 方法只对成员变量起作用,对于类变量不起作用,final类型常量只有getter方法
@Getter(AccessLevel.PROTECTED)这个就是将getter方法的类型修饰符变为protected
@Getter(AccessLevel.NONE)这个就是某些成员不想添加getter方法可以不添加.
@ToString
@Getter
public class Account implements Serializable {
private static final long serialVersionUID = 7063222791609347900L;
private Integer id;
private Integer uid;
private Double money;
@Getter(AccessLevel.NONE)
private User user;
}
toString
功能:打印对象字符串
@ToString(exclude = ("money"))打印的时候将money字段排除在外@ToString(of =("成员变量或者静态变量") )打印时只输出 of 里边的变量。
@EqualsAndHashCode
@EqualsAndHashCode (exclude = ("money"))在生成的equals,canEqual,hashCode方法中不会出现money变量的比较。
@NonNull
帮助我们省掉一些判断是否为空的代码
public void test(@NonNull String s){
System.out.println(s);
}
@Test
public void test1(){
new Account().test(null);
}
结果:
java.lang.NullPointerException: s is marked non-null but is null
@NoArgConstructor和@RequiredArgsConstructor和@AllArgConstructor
@NoArgConstructor 无参构造器
@RequiredArgsConstructor(未赋值的final常量,加入@NonNull的成员变量)
@AllArgConstructor全参构造区
@Data
集成了
- @Getter/@Setter
- @ToString
- @EqualsAndHashCode
- @NonNull
- @RequiredArgsConstructor
@Builder
@Builder 类似于函数式编程,假如以后会生成
在你需要赋值的时候,你可以
@Data
@Builder
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
@Test
public void test1(){
Account account = Account.builder().id(1).uid(2).money(2.0).build();
System.out.println(account);
}
}
@Log
输出日志
val
val map = new HashMap<String,Integer>();
我们可以在定义的时候一律用val代替
@Cleanup
比如最常见的InputStream流每次打开后都要关闭,我们可以在
@Cleanup Inputstream in = new FileInputStream("filepath");
这样我们可以省去关闭流的麻烦
OVER!如果这篇文章对你有帮助的话,不胜感激!!!
本文使用 👉mdnice 排版