Lombok注解
前言
Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的Java模型对象(POJO)。在开发环境中使用Lombok插件后,Java开发人员可以节省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生成这些方法,并没有如反射那样降低程序的性能。
它所有的增强都是通过注解实现,所以了解其使用主要了解一下注解即可
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
<version>1.18.16</version>
</dependency>
常用注解
@NoArgsConstructor/@AllArgsConstructor
这两个注解很好理解,就是为该类产生无参的构造方法和包含所有参数的构造方法。当然,成员变量都是非静态的。另外,如果类中含有final修饰的成员变量,是无法使用@NoArgsConstructor注解的。
@EqualsAndHashCode
这个注解很好理解,用于生成生成hashCode()和equals()
@ToString
生成toString()方法
@Getter/@Setter
这一对注解从名字上就很好理解,用在成员变量上面或者类上面,相当于为成员变量生成对应的get和set方法,同时还可以为生成的方法指定访问修饰符,当然,默认为public
这两个注解直接用在类上,可以为此类里的所有非静态成员变量生成对应的get和set方法。如果是final变量,那就只会有get方法
@NonNull
这个注解可以用在成员方法或者构造方法的参数前面,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常。
@RequiredArgsConstructor
使用类中所有带有@NonNull注解的或者带有final修饰的成员变量生成对应的构造方法
例子
@RequiredArgsConstructor
public class Example {
@NonNull
private Integer foo;
private final String bar;
}
生成后
public class Example {
@NonNull
private Integer foo;
private final String bar;
public Example(@NonNull Integer foo, String bar) {
if (foo == null) {
throw new NullPointerException("foo is marked @NonNull but is null");
} else {
this.foo = foo;
this.bar = bar;
}
}
}
@Builder
生成构建者(Builder)模式
例子
@Builder
public class Demo {
private final int finalVal = 10;
private String name;
private int age;
}
生成
public class Demo {
private final int finalVal = 10;
private String name;
private int age;
Demo(String name, int age) {
this.name = name;
this.age = age;
}
public static Demo.DemoBuilder builder() <