Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。
Lombok的使用跟引用jar包一样,可以在官网(https://projectlombok.org/download)下载jar包,也可以使用maven添加依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
(1)@Data
@Data注解在类上,集合了@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor的所有特性,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Data public class DataExample {}
(2)@Getter/@Setter
@Getter @Setter private int age = 10;
@Setter(AccessLevel.PROTECTED) private String name;
相当于:
private int age = 10;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected void setName(String name) {
this.name = name;
}
(3)@NonNull (同@NotEmpty)
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
相当于
public NonNullExample( Person person) {
super("Hello");
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}
(4)@ToString
类使用@ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性(会按照属性定义顺序),用逗号来分割。
@ToString(exclude="id")
public class ToStringExample {}
(5)@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
1) 无参构造器使用lombok提供的构造器注解@NoArgsConstructor
@NoArgsConstructor
public class AnnoNoArgConstructor {
private String id;
private String name;
}
相当于
public class NoArgConstructorN {
private String id;
private String name;
public NoArgConstructorN() {
}
}
2) 全参构造器使用lombok提供的构造器注解@AllArgsConstructor
@AllArgsConstructor
public class AnnoAllArgConstructor {
private String id;
private String name;
}
相当于
public class AllArgConstructorN {
private String id;
private String name;
public AllArgConstructorN(String id, String name) {
this.id = id;
this.name = name;
}
}
3) 必要参数构造器使用lombok的@RequiredArgsConstructor注解,为所有必要的 final 和 @NonNull 修饰的属性生成一个构造方法。
@RequiredArgsConstructor()
public class AnnoReqArgConstructor {
// 既然要求NonNull,那么在构造时必须提供且一定非空
@NonNull
private final String id;
private String name;
private String desc;
}
相当于
public class ReqArgConstructorN {
private final String id;
private String name;
private String desc;
public ReqArgConstructorN(String id) {
if (id == null) {
throw new NullPointerException("id");
} else {
this.id = id;
}
}
}
(6)@Size(max, min) @Min(value) @Max(value) @DecimalMin(value) @DecimalMax(value) @Digits(integer, fraction) 限制范围
// 字符串nam的长度为10到20之间。
@Size(min = 10, max = 20)
private String name;
// 数组args的长度为10到Integer.MAX_VALUE之间
// 不给出max,默认为Integer.MAX_VALUE
@Size(min = 10)
private String[] args;
// 列表list的长度为0到100
// 不给出min,默认为0
@Size(max = 100)
private List<String> list;
// cost的最大值为1000
@Max(1000)
private int cost;
// 支持浮点数,cost的最小值为1000.5,注意:浮点型优先使用String构造方法@DecimalMin("1000.5")而不是@DecimalMin(1000.5)
@DecimalMin("1000.5")
private BigDecimal cost;
// num的整数位数不超过5,小数位数不超过2
@Digits(integer = 5, fraction = 2)
private String num;
网友评论