文章目录
1. 在 IDEA 中添加对 Lombok 的支持
- 首先需要安装
Lombok
插件,步骤如下:
File > Settings > Plugins
,搜索Lombok
,选择Install
进行安装。
- 接着需要开启
Annotation Processors
,使得Lombok
注解在编译期间可以起作用,步骤如下:
File > Settings > Build, Execution, Deployment > Compiler> Annotation Processors
,选择Default
进行全局设置或者选择某个模块进行单独设置,打开Enable annotation processing
- 最终重启 IDEA 即可。
2. 在 Maven 引入对应依赖
在 pom.xml
中引入 Lombok
的依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
3. Lombok 常用注解
3.1 @Getter/@Setter
- 当
@Getter\Setter
作用于类上时,就会生成所有成员变量的GetXxx()/SetXxx()
方法
@Getter
@Setter
public class GetterAndSetterDemo {
private int age;
private String name;
}
编译后的字节码文件见下图:
- 当
@Getter\Setter
单独作用于成员变量上时,就会生成对应成员变量的GetXxx()/SetXxx()
方法
public class GetterAndSetterDemo {
@Getter
@Setter
private int age = 10;
@Setter(AccessLevel.PROTECTED)
private String name;
}
为
age
生成GetXxx()/SetXxx()
方法,为name
生成Setxxx()
方法,同时将其访问级别设置为protected
,编译后的字节码文件见下图:
3.2 @ToString
@ToString
只能作用于类上,用于生成toString()
方法,可通过属性of
限定显示某些字段,属性exclude
排除某些字段,默认展示所有字段。
@Getter
@Setter
@ToString(of = {"name", "address"})
public class GetterAndSetterDemo {
private Integer id;
private String name;
private String address;
private String tel;
}
表明在
toString()
方法中只展示字段name
和字段address
,编译后的字节码文件见下图:
@Getter
@Setter
@ToString(exclude = {"id"})
public class GetterAndSetterDemo {
private Integer id;
private String name;
private String address;
private String tel;
}
表明排除字段
id
,编译后字节码文件见下图
3.3 @EqualsAndHashCode
@EqualsAndHashCode
只能作用于类,用于覆盖默认的hashCode()
和equals()
方法。
3.4 @NonNull
@Nonnull
可以作用于成员变量上,也可以作用在方法参数上,表示该字段或者参数不能为null
,否则会抛出空指针异常
public class NonNullExample {
private Integer id;
@NonNull
@Setter
private String name;
public void show(@NonNull String str) {
System.out.println(str);
}
}
如果此时在测试类中为字段 name
设置为 null,或者调用 show()
方法并传入 null
,都会抛出空指针异常
@Test
public void testNonNull() {
NonNullExample nn = new NonNullExample();
// nn.setName(null);
nn.show(null);
System.out.println(nn);
}
3.5 @NoArgsConstructor
@NoArgsConstructor
只能作用于类上,用于生成无参构造器,可以使用属性staticName
指定生成实例的静态方法的方法名,属性access
指定访问权限。
@NoArgsConstructor(staticName = "of")
public class NoArgsConstructorExample {
private String name;
private int age;
}
3.5 @RequiredArgsConstructor
@RequiredArgsConstructor
只能作用于类上,用于生成包含final
变量和标识@NonNull
变量的带参构造器,可以使用属性staticName
指定生成实例的静态方法的方法名,属性access
指定访问权限。- 如果某个成员变量使用
@NonNull
注解,那么在构造方法中会进行非空判断。
- 如果某个成员变量使用
@RequiredArgsConstructor
public class RequiredArgsConstructorExample01 {
@NonNull
private String name;
private int age;
}
3.6 @AllArgsContructor
@AllArgsContructor
只能作用于类上,用于生成包含所有成员变量的带参构造器,可以使用属性staticName
指定生成实例的静态方法的方法名,属性access
指定访问权限。- 如果某个成员变量使用
@NonNull
注解,那么在构造方法中会进行非空判断。
- 如果某个成员变量使用
@AllArgsConstructor
public class AllArgsConstructorExample {
@NonNull
private String name;
private int age;
}
在开发中,根据需求,将
@NoArgsConstructor
、@RequiredArgsConstructor
、@AllArgsConstructor
搭配使用,生成所需的构造器。
3.7 @Data 注解
@Data
只能作用与类上,相当于@ToString
、@EqualsAndHashCode
、@Getter
、@Setter
、@RequiredArgsConstructor
的结合。
4. 总结
- 以上只是关于
Lombok
的基本使用,如果有兴趣深入了解的话可以前往 GIthub 学习 :lombok-intellij-plugin