当一个类中含有多个成员变量时,可能会涉及到多个参数个数不同的构造器来构造对象。这无疑产生的极大的麻烦。并且对于别的同事来说,阅读起来也很不方便。
如下面这种:
public class Person {
private int id;
private String name;
private int age;
private String gender;
private String address;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public Person(int id, String name, int age, String gender) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
public Person(int id, String name, int age, String gender, String address) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.address = address;
}
}
在阅读时,还要去一个个对应变量,查看对应的传入的参数是具体的哪个值。
所以,提出可以使用构建器来解决上述阅读难的问题
public class Person {
private int id;
private String name;
private int age;
private String gender;
private String address;
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", address='" + address + '\'' +
'}';
}
private Person(Builder builder){
id = builder.id;
name = builder.name;
age = builder.age;
gender = builder.gender;
address = builder.address;
}
public static class Builder{
//必需变量
private int id;
private String name;
//非必须变量
private int age;
private String gender;
private String address;
public Builder(int id, String name) {
this.id = id;
this.name = name;
}
public Builder age(int val){
age = val;
return this;
}
public Builder gender(String val){
gender = val;
return this;
}
public Builder address(String val){
address = val;
return this;
}
public Person build(){
return new Person(this);
}
}
public static void main(String[] args) {
Person p = new Builder(1,"张三").age(19).build();
System.out.println(p);
}
}
对非必需变量可以不调用其方法传参,同时方便阅读。
学习自 Effective Java.