一、引入lombok
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
IDEA还需要下载lombok插件。
二、lombok的使用
1.@Data
@Data
public class Student {
private String name;
private Integer age;
}
@Data的功能很强大:
/**
* @Data
* 会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法
*/
Student student = new Student();
student.setAge(18);
student.setName("yunmuzhou");
//从日志中可以看出,toString()已经被重写
log.info("@Data:" + student);
输出日志:
@Data:Student(name=yunmuzhou, age=18)
2.@Getter & @Setter
public class Person {
@Getter
@Setter
private String name;
@Getter
@Setter
private Integer age;
}
但是借助于Lombok,一切都变得优雅起来,代码篇幅省了一半
/**
* @Getter
* @Setter
* 省去了写getter(),setter()方法
*/
Person person = new Person();
person.setAge(10);
person.setName("ymz");
log.info("@Getter age :" + person.getAge() + ",@Getter name : " + person.getName());
输出结果:
@Getter age :10,@Getter name : ymz
3.@Builder
@Data
@Builder
public class Man {
private String name;
private String sex;
}
new对象变得优雅了:
/**
* @Builder
* 链式编程,很方便的创建一个新的对象 =====(以build()方法结尾) ====
*
* 1.构造一个空对象
* 2.构造一个对象并初始化
*/
Man man01 = Man.builder().build();
Man man02 = Man.builder().name("ymz").sex("male").build();
log.info("man01 : " + man01);
log.info("man02 : " + man02);
输出结果:
man01 : Man(name=null, sex=null)
man02 : Man(name=ymz, sex=male)
4.@AllArgsConstructor & @NoArgsConstructor & @RequiredArgsConstructor
@Data
//@AllArgsConstructor
//@NoArgsConstructor
@RequiredArgsConstructor
public class Human {
private String name;
private String sex;
private final String address;
}
/**
* @AllArgsConstructor 全参数构造
* 构建一个全部参数的构造方法
*/
//Human man = new Human();
/**
* @NoArgsConstructor 无参数构造
* 构建一个无参构造
*/
Human man = new Human();
/**
* 构建一个只包含final修饰的构造方法
*/
Human man = new Human("浙江");
5.@NonNull
优雅的进行null判断:
public static void testNonNull(@NonNull String name){
log.info(name);
}
测试一下:
testNonNull(null);
结果:
Exception in thread "main" java.lang.NullPointerException: name is marked non-null but is null
6.很方便的关闭流stream
假如我们要读取一个文档,一般会这样操作:
注意,这个文件句柄在使用完成之后是一定要手动 close的,否则就有可能资源泄漏。
有了Lombok之后,这种擦屁股活儿统统不用干了,一个 @Cleanup注解即可搞定
7.异常捕捉的便捷性
比如我们打开一个 txt文本文件:
这地方的 FileNotFoundException异常,要么显式地在函数级抛出,要么就像上面一样 try/catch内部消灭。
如果在编码时,不想处理这种繁杂的异常处理,你可以使用Lombok的 @SneakyThrows注解进行简化,比如上面的代码就可以简化为:
必须友情提示的是:这样写你是爽了,但你很有可能会被队友一顿暴打,因为别人调用你编写的函数,并不能显式的获知需要处理哪些异常,这样容易留坑!
好了,受限于篇幅限制,抛砖引玉就到这里了。
上面列举了几个平时项目开发中使用非常频繁的Lombok注解,除此之外,还有诸如像:
- @ToString:为类自动生成toString()方法
- @EqualsAndHashCode:为类自动生成hashCode和equals实现
- @Log:为类自动生成log日志记录
- @Synchronized:为类方法或实例方法自动生成synchronized保护
等工具也是非常好用的,大家可以尝试在项目里用起来。
从此,代码5分钟,划水2小时不是梦。。。
部分内容引用来源CodeSheep