您的位置:首页 > 编程语言 > Java开发

java中用builder去自定义构造方法

2016-03-04 12:32 561 查看

相信大家平常在使用java编程时经常会用到构造方法,但是有时候我们会遇到一个非常麻烦的问题:

如下 public class Person1 {
private String name;
private int age;
private String gender;
private String phone;
private String email;
private String address;
public Person1(String name, int age, String gender, String phone, String email, String address) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.phone = phone;
this.email = email;
this.address = address;
}
public Person1(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
}

 在上面这段代码中,我们定义了两个构造方法,但是如果要用 Person1(String name, int age, String gender, String phone)这个构造方法时又要很麻烦的去定义一个,这类问题我在数据库查询时经常遇到,比如当你只查询了name ,age这两个字段,然后为了方便访问需要实例化person对象时,就要重新定义Person(String age,int age)这个构造方法,这样十分麻烦,因此当你用builder去自定义构造方法,这些问题就迎刃而解了。具体方法如下:

代码 public class Person {

// 用builder替代构造方法可以省去定义很多构造方法的麻烦
public static class Builder {
private String name;
private int age;
private String gender;
private String phone;
private String email;
private String address;

// 如果这样定义,定义时就必须要带名字这个参数
public Builder(String name) {
this.name = name;
}

public Builder setName(String name) {
this.name = name;
return this;
}

public Builder setAge(int age){
this.age = age;
return this;
}

public Builder setGender(String gender) {
this.gender = gender;
return this;
}

public Builder setPhone(String phone) {
this.phone = phone;
return this;
}

public Builder setEmail(String email){
this.email = email;
return this;
}
public Builder setAddress(String address){
this.address = address;
return this;
}

public String getName(){
return name;
}

@Override
public String toString() {
return "Builder [name=" + name + ", age=" + age + ", gender=" + gender + ", phone=" + phone + ", email="
+ email + ", address=" + address + "]";
}
}
}

 这样定义后,你就可以随心所欲的去定义构造方法了:

调用 public class Test {
public static void main(String[] args) {
//无论你需要Person属性中的哪几个,随便定义,而且不分顺序,方便性秒杀去定义构造方法
//前面定义了 Builder(String name),所以实例化时必须定义
Builder person = new Builder("小明").setGender("男").setPhone("432432").setAge(20);
System.out.println(person.toString());
System.out.println(person.getName());
}
}

  运行结果:

 Builder [name=小明, age=20, gender=男, phone=432432, email=null, address=null]

 

 小明

 

 当然,我们不会经常碰到这种需要反复去定义构造方法的情况,但是如果真的遇到,这种方法还是可以省掉不少繁琐的步骤的,提升我们的效率

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: