本篇文章目标
了解Lombok、安装Lombok、使用Lombok
前置技能:IDEA、Maven
1. 了解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.
提取关键词:Java 库、自动插件、提高效率、再也不编写get、equals等方法、使用注解
1.1 初识
使用Lombok前:需要手动生成get/set/equals/hashCode/toString方法
使用后效果:加注解,减少代码冗余
2. Lombok原理
Java规范:JSR 269(Java Specification Requests) 插件化注解处理API(Pluggable Annotation Processing API)
JDK6提供的特性,在 Javac编译期(SOURCE标识)利用注解,在字节码文件中生成get、set等方法
Java编译器执行过程:
查看编译后的字节码文件:
![在这里插入图片描述](https://img-blog.csdnimg.cn/34692b34b1bd43c2bb67a10eec18b284.png#pic_center)3. Lombok安装
3.1 在Maven的pom.xml中添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
3.2 IDEA安装插件
File-->Settings-->Plugins(插件)-->Marketplace-->搜索Lombok-->Install-->Apply-->重启IDEA
4. Lombok注解
4.1 @Getter/@Setter
1. 可以为单个成员变量设置get方法
2. 可以为所有成员变量设置get、set方法 。同时可以为某个成员变量设置其他权限(默认public)、或设置取消get/set方法
3. 无法为static设置get/set方法,只为final类型设置get方法
4.2 @ToString
ToString只能加在类上,自动生成ToString方法,使用exclude排除多个字段,of必须包含哪些字段。
@ToString(exclude = {"字段1","字段2"} ,of = {"",""})
4.3 @EqualsAndHashCode
生成equals方法、canEqual(判断是否属于Car类)、hashCode方法。也可以进行相等比较的排除,指定。
@EqualsAndHashCode(exclude = {"字段1","字段2"})
4.4 @NonNull
可以加在成员变量前,也可以加在方法参数前。用来指定某个字段不能为空
4.5 构造器注解
@NoArgsConstructor:无参构造器
@RequiredArgsConstructor:生成指定类型(final ,@NonNull)
@AllArgsConstructor:所有参数构造器
4.6 @Data
集成@Getter/@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor
4.7 @Builder
使用此注解进行对象的构建,函数式编程/链式编程,省去逐行字段set。
CarLombok build = CarLombok.builder().id(1).type("string").price(88.8).level('a').build();
System.out.println(build.toString());
4.8 @Log
支持Log4j、Slf4j,日志功能
public static void main(String[] args) {
CarLombok build = CarLombok.builder().id(1).type("string").price(88.8).level('a').build();
System.out.println(build.toString());
build.logTest("input");
}
public void logTest(String test){
log.info("test function");
System.out.println(test);
}
输出信息
CarLombok(age=3, id=1, type=string, price=88.8, level=a)
一月 11, 2021 11:39:07 下午 org.example.CarLombok logTest
信息: test function
input
4.9 val
类比JS中的val(弱引用类型),在编译阶段确定类型,简化操作
使用 val map = new HashMap<String, String>();
替换 Map<String, String> map = new HashMap<>();
4.10 @Cleanup
对资源流进行清理
@Cleanup InputStream in = new FileInputStream("filepath");
@Cleanup OutputStream out = new FileOutputStream("filepath2");