https://projectlombok.org/features/all
官网文档,只有几个注解,但是功能很是强大。
1. 在idea中使用Lombok,可以使用插件,在插件处输入Lombok就可以安装了,比较简单。
2. 一般是使用Maven导入lombok.jar
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<scope>provided</scope>
</dependency>
3. @Getter/@Setter
使用在类和属性上,用在类上时,会对所有的非静态(non-static)属性生成相应的Getter/Setter方法。注解在属性上时,对该属性生成Getter/Setter方法。可以指定Getter/Setter方法的访问级别。
4. @EqualsAndHashCode
默认情况下,对所有非瞬态(non-transient)和非静态(non-static)字段生成equals和hashCode方法,也可以指定具体使用哪些属性
5. @ToString
生成toString方法,默认情况下,会输出类名、所有属性,属性按照顺序输出,以逗号分割。
6. @NoArgsConstructor,@RequiredArgsConstructor and @AllArgsContructor
无参构造器、部分参数构造器、全参构造器。当我们需要重载多个构造器的时候,Lombok就没办法了,这个时候我们就只能自己重载这些构造器。
7. @Data
@ToString,@EqualsAndHashCode,所有属性的@Getter,所有non-final属性的@Setter和@RequiredArgsConstructor的组合。通常情况,使用这个注解就OK了
8. @Accessors(chain = true)
使用链式结构
没有使用注解的代码:
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public Student setName(String name) {
this.name = name;
return this;
}
public int getAge() {
return age;
}
public Student setAge(int age) {
return this;
}
}
使用注解的代码:
@Accessors(chain = true)
@Data
@NoArgsConstructor(staticName = "of")
public class Student {
private String name;
private int age;
}
调用:
Student student = Student.of().setName("wsk").setAge(12);
9. @RequiredArgsConstructor和@NonNull:
静态构造方法和必传参数的构造方法,
@Accessors(chain = true)
@Setter
@Getter
@RequiredArgsConstructor(staticName = "ofName")//staticName中可以任意编写
public class Student {
@NonNull
private String name;//该元素在构造函数中必须输入
private int age;
}
测试代码:
Student student = Student.ofName("WSK");
10. @Builder
使用builder,构建 建造者模式
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static Builder builder(){
return new Builder();
}
public static class Builder{
private String name;
private int age;
public Builder name(String name){
this.name = name;
return this;
}
public Builder age(int age){
this.age = age;
return this;
}
public Student build(){
Student student = new Student();
student.setAge(age);
student.setName(name);
return student;
}
}
}
调用方式:
Student student = Student.builder().name("zs").age(24).build();
使用@Builder
@Builder
public class Student {
private String name;
private int age;
}
调用方式同上。
11. 以下为不常用的
12. @Value
Immutable classes made very easy.
13. @SneakyThrows
To boldly throw checked exceptions where no one has thrown them before!
14. @Synchronized
synchronized done right: Don't expose your locks.
15. @Getter(lazy = true)
懒加载
16. @Log
Captain's Log, stardate 24435.7: "What was that line again?"