@Accessors用法
Accessor的中文含义是存取器,@Accessors用于配置getter和setter方法的生成结果,下面介绍三个属性
1、fluent
fluent的中文含义是流畅的,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。如下
@Data
@Accessors(fluent = true)
public class User {
private Long id;
private String name;
// 生成的getter和setter方法如下,方法体略
public Long id() {}
public User id(Long id) {}
public String name() {}
public User name(String name) {}
}
2、chain
chain的中文含义是链式的,设置为true,则setter方法返回当前对象。如下
@Data
@Accessors(chain = true)
public class User {
private Long id;
private String name;
// 生成的setter方法如下,方法体略
public User setId(Long id) {}
public User setName(String name) {}
}
PS:setter方法返回当前对象作用:可以链式调用,如:User user = new User().setId(1).setName(“name”);
3、prefix
prefix的中文含义是前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。如下
@Data
@Accessors(prefix = "p")
class User {
private Long pId;
private String pName;
// 生成的getter和setter方法如下,方法体略
public Long getId() {}
public void setId(Long id) {}
public String getName() {}
public void setName(String name) {}
}
@Builder
相当于
public class Student {
// 必选
private String name;
// 可选
private int age;
private String title;
private static class Builder {
// 必选
private String name;
// 可选
private int age;
private String title;
public Builder(String name) {
this.name = name;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder title(String s) {
this.title = s;
return this;
}
public Student build() {
return new Student(this);
}
}
private Student(Builder builder) {
name = builder.name;
age = builder.age;
title = builder.title;
}
这里面有几个重要的点:
将Student类的构造方法私有化,所以想要新建Student必须使用Builder.
Builder只有一个构造方法,传入必选的参数,这样可以保证每个Student都会有必选参数.
对所有的可选参数提供同名方法,使得可选参数可以被设置,同时返回自身.
Builder提供build方法,调用Student私有的构造方法,返回对象.
客户端的调用方法如下:
@Builder
public class Student {
// 必选
private String name;
// 可选
private int age;
private String title;
}
public static void main(String[] args) {
Student s = new Builder("huyan").age(11).title("888").build();
}