面对工作中大量重复的,毫无技术含量 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);}@Testpublic 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;@Testpublic 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!如果这篇文章对你有帮助的话,不胜感激!!!