Effective Java 2 -- 遇到多个构造器参数的时候考虑构建器
来源:互联网 发布:生成式对抗网络 应用 编辑:程序博客网 时间:2024/06/05 11:01
当有构造器的多个参数而且有必选参数和可选参数的时候,我们通常会使用什么样的方法来创建对象?
也许是我们可以用重载构造器来进行创建,但是那样需要写的构造方法太多,而且创建对象的时候我们也许会忘记我们构造器方法的参数顺序。
也许我们会使用JavaBean的规范,设置空构造器,然后使用set方法来一一赋值,这样使得参数在赋值过程中可读性更好,然而JavaBean模式阻止了把类做成不可变的可能,这不是线程安全的。
下面要介绍的就是更加安全,而且可读性更好的方法----构建器:
package 构建器;public class MyBuilder { //以下两个元素是必须的 private int i1; private int i2; //以下两个元素是可选的 private int i3; private int i4; public static class Builder{ //必须参数 private final int i1; private final int i2; //可选参数 private int i3 = 0; private int i4 = 0;//默认参数 public Builder(int i1,int i2){ this.i1 = i1; this.i2 = i2; } public Builder i3( int i3 ){ this.i3 = i3; return this; } public Builder i4( int i4 ){ this.i4 = i4; return this; } public MyBuilder build(){ return new MyBuilder(this); } } public MyBuilder( Builder builder){ this.i1 = builder.i1; this.i2 = builder.i2; this.i3 = builder.i3; this.i4 = builder.i4; } public static void main(String[] args) { MyBuilder myBuilder = new MyBuilder.Builder(1, 2).build();//创建一个(i1,i2,i3,i4)参数分别为(1,2,0,0)的对象 MyBuilder myBuilder2 = new MyBuilder.Builder(1, 2).i3(3).i4(4).build();//创建一个(i1,i2,i3,i4)参数分别为(1,2,3,4)的对象 }}
这样的构建方法显然比重载构造器要可读性强,也不是像JavaBean模式那样可变的。但是这样写会有一定的开销,而且比较冗长。总之,当构造器的参数过多的时候就可以考虑使用这种方法。
阅读全文
1 0
- Effective Java 2 -- 遇到多个构造器参数的时候考虑构建器
- 2、遇到多个构造参数的时候需要考虑使用构建器(effective java)
- Effective Java (2) - 遇到多个构造器参数时要考虑用构建器
- effective java(2) 之遇到多个构造器参数时要考虑用构建器
- Effective Java第二条:遇到多个构造器参数时要考虑用构建器
- Effective Java 第二条:遇到多个构造器参数时要考虑用构建器
- Effective-Java学习笔记 遇到多个构造器参数时要考虑用构建器
- effective java(一)遇到多个构造器参数 时要考虑用构建器
- Effective Java -- 遇到多个构造器参数时要考虑用构建器(Builder)
- 《Effective java》读书记录-第2条-遇到多个构造器参数时要考虑用构建器
- Effective Java记录2:遇到多个构造器考虑用构建器(Builder)
- 遇到多个构造器参数时要考虑用构建器——Effective Java 读书笔记
- Effective Java 2.2——遇到多个构造器参数时要考虑用构建器
- Effective Java 创建和销毁对象 2.遇到多个构造器参数时要考虑用构建器
- Effective Jave——第2条: 遇到多个构造器参数时考虑使用构建器(Builder)
- Effective java第二条:遇到多个构造器参数时要考虑用构造器
- Effective JAVA :遇到多个构造器时要考虑使用构建器
- [Effective Java] 第2条 遇到多个构造器参数时要考虑用构造器
- 关于简单的蕴含式的数学表达 第一次写注释 我有更好的检查事实库是否有更新的方法
- 锋利的jQuery(jQuery中的DOM操作)
- CI-加载视图
- Android 获取USB扫描枪扫描数据(无界面)
- 直接地址,一次间接地址,多次间接地址,索引组织方式
- Effective Java 2 -- 遇到多个构造器参数的时候考虑构建器
- java 数据结构--链式表
- 关于Visualizing and understanding convolutional networks的一次报告
- 系统间通信方式之(基于DUBBO的详细介绍)(十一)
- ROS学习笔记--清除一些僵尸node
- CentOS7,keepalived+ httpd 搭建双机热备
- 怎样在win7中 安装Tomcat7.0
- 如何使用优先级视图
- [NOIP2017][luogu3953]逛公园