java进阶-创建和销毁对象2
2015-11-10 21:56
471 查看
第二条:遇到多个构造器参数时要考虑用构建器
场景:当一个类创建对象时需要传参数的时候,例如
场景:当一个类创建对象时需要传参数的时候,例如
public class Person { private int age; private String name; private String school; .... } //通常使用的方法是 Person(int age,String name,String school) { this.age=age; this.name=name; this.school=school; } //那么问题来了,如果我需要创建一个对象,但他并没有school属性怎么办?用上面的构造方法需要 Person jacker =new Person(22,"jacker","null"); //对象的属性就会发生了变化,而当数据量比较大的时候我们没有能力记录各种各样的非正常数据所表示的含义 //或许你会说可以再定义一个构造器 Person(int age,String name) //但是参数位置和类型都需要去记忆,稍有不慎就会出现错误,详细请看上一个博客 //或许有人会考虑无参数构造器+set+get的方法给每个参数传值,如 Person(){} public void setAge(String age) { this.age=age; } public String getAge() { return this.age; } .... //这样虽然会弥补上一个的不足,而且代码的可读性很好,但是,如果线程是不安全的,那么每个对象在定义属性的时候可能会发生混乱 //第三种方法 public class Person { private int age; private String name; private String school; private String classNumber; public static class Builder { private int age; private String name; private String school; private String classNumber; public Builder(int age,String name) { this.age=age; this.name=name; } public Builder school(String school) { this.school=school; return this; } public Builder classNumber(String classNumber) { this.classNumber=classNumber; return this; } public Person build() { return new Person(this); } } private Person(Build build) { this.age=build.age; this.name=build.name; this.school=build.school; this.classNumber=classNumber; } } //使用方法 Person jacker=new Person.Build(22,"jacker").school("null").classNumber("null").build(); //和上面的两种构造方法比起来,很明显就可以看出这个jacker对象的school和classNumber属性是"null" //这种方法很容易编写,也易于阅读,但是他的缺点就在于创建构建器的开销比以上两种都要大,只能用于对性能要求不是特别注重,而且参数比较多的情况下
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统