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]
小明
当然,我们不会经常碰到这种需要反复去定义构造方法的情况,但是如果真的遇到,这种方法还是可以省掉不少繁琐的步骤的,提升我们的效率
相关文章推荐
- JAVA笔记9__异常/throw关键字/自定义异常/受检与非受检异常、assert关键字/StringBuffer、StringBuilder/代码国际化、动态文本
- java 自定义异常,记录日志简单说明!留着以后真接复制
- java使用闭环数组自定义高性能队列
- java例程练习(自定义异常处理)
- Java annotation 自定义注释@interface的用法
- 如何编写和应用Java的自定义异常类
- java程序员第十三课-EL表达式、JSTL标签库、EL函数库、自定义EL函数和自定义标签
- redis 存储自定义java对象有几种方式
- Java Builder模式构建MAP/LIST的实例讲解
- Java设计模式 - Builder(建造者模式)
- matlab builder for Java 的学习日记
- java自定义按钮外观
- java自定义注解
- java 自定义异常
- Java 自定义标签
- 基于java config的springSecurity(二)--自定义认证
- java自定义异常
- javaWeb 在jsp中 使用自定义标签输出访问者IP
- 如何在Android中写和使用一个自定义的java库