如果构建一个对象需要很多参数时,那么有三种方式可以实现。 第一种就是多重构造器

public class Person {private final int id;           //requiredprivate final String name;      //requiredprivate final int age;          //optionalprivate final int gender;          //optionalprivate final Date brithDay;          //optionalpublic Person(int id, String name, int age, int gender, Date brithDay) {this.id = id;this.name = name;this.age = age;this.gender = gender;this.brithDay = brithDay;}public Person(int id, String name, int age, int gender){this(id, name, age, gender, null);}public Person(int id, String name, int age){this(id, name, age, 0);}public Person(int id, String name){this(id, name,0);}
}
复制代码

第二种JavaBean 通过setter设置参数 缺点:因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态。 第三种Builder构建器模式

public class Person {private final int id;           //requiredprivate final String name;      //requiredprivate final int age;          //optionalprivate final int gender;          //optionalprivate final Date birthday;          //optionalpublic static class Builder implements com.zml.Builder<Person>{private int id;           //requiredprivate String name;      //requiredprivate int age = 0;          //optionalprivate int gender = 0;          //optionalprivate Date birthday = null;          //optionalpublic Builder(int id,String name){this.id = id;this.name = name;}public Builder age(int age){this.age = age;return this;}public Builder gender(int gender){this.gender = gender;return this;}public Builder brithDay(Date brithDay){this.birthday = brithDay;return this;}@Overridepublic Person builder() {return new Person(this);}}public Person(Builder builder) {this.id = builder.id;this.name = builder.name;this.age = builder.age;this.gender = builder.gender;this.birthday = builder.birthday;}public static void main(String[] args) {Person person = new Person.Builder(1,"hello").builder();}
}
public interface Builder<T> {T builder();
}
复制代码

effective java 第2条:遇到多个构造器参数时要考虑用构造器相关推荐

  1. 【读书笔记】《Effective Java》第二章 第2条:遇到多个构造器参数时要考虑使用Builder

    一.前言 <Effective Java>读书笔记系列 第二章 第1条:创建和销毁对象 第二章 第2条:遇到多个构造器参数时要考虑使用Builder 二.介绍 我们开发中偶尔会遇到一些需要 ...

  2. Effective.Java第23-33条(泛型相关)

    23.  类结构层次优于标签类 有时你会碰到一个类,它的实例有一个或多个风格,并且包含一个tag属性表示实例的风格.例如,如下面的类表示一个圆或者矩形: public class Figure {/* ...

  3. Effective Java第七条:避免使用终结方法

    第七条:避免使用终结方法 1,  终结方法(finalizer)会让程序不稳定,性能降低,出现可移植性的问题. 2,  Finalizer在c++中师析构器(destructors)的一部分,用作回收 ...

  4. effective java第45条:将局部变量的作用域最小化

    我以前写for循环的例子: public class Client {public static void main(String[] args) {Client client = new Clien ...

  5. java开发进度条怎么监控,上传文件时监控读取进度,显示进度条

    我们在使用异步事件处理时还能顺便获得一项优势,那就是能够监控文件的读取进度:这对于读取大文件.查找错误和预测读取完成时间非常实用. onloadstart 和 onprogress 事件可用于监控读取 ...

  6. Effective Java 创建和销毁对象 2.遇到多个构造器参数时要考虑用构建器

    静态工厂跟构造器都有一个共同的局限性:不能很好的扩展到大量的参数. 例: package com.example.yancy.yancy; /**  * Created by yancy on 201 ...

  7. 第2条 遇到多个构造器参数时要考虑构建器

    2019独角兽企业重金招聘Python工程师标准>>> 假如,对于这样的类,属性多达10多个,有以下几种处理方式. 处理方式1: 一般来说,我们大多采用重叠构造器模式,在这种模式下, ...

  8. java后台请求第三方接口,写入中文参数时失败“message“:“Invalid UTF-8 start byte 0x84\n at XXXXXXXXX

    RT调用第三方接口时,参数有些要传入中文,在connection.setRequestProperty("Content-Type", "application/json ...

  9. Effective Java 在工作中的应用总结

    简介: <Effective Java>是一本经典的 Java 学习宝典,值得每位 Java 开发者阅读.笔者将书中和平日工作较密切的知识点做了部分总结. 作者 | 宜秋 来源 | 阿里技 ...

最新文章

  1. 深度学习 -- TensorFlow(9)循环神经网络RNN
  2. 数学家的亿万商业王国:先后创建“验证码”和“多邻国”,20岁就被盖茨亲自挖去微软!...
  3. node.js 多异步之间的协作方案
  4. pytorch maxpool和卷积尺寸问题
  5. Windows 技术篇-win7利用系统自带工具关闭开机启用程序,不使用杀毒软件设置开机启动项
  6. c语言中赋予从2开始的偶数,2013年计算机二级C语言上机试题三十二及答案
  7. Android studio的sdk tools下没有LLDB的解决办法
  8. python实现文件上传功能_python实现文件上传功能
  9. Linux 动态库剖析
  10. linux设置最大打开文件数
  11. charles iPhone抓包步骤 Fiddler
  12. 【pytorch图像分类】ResNet网络结构
  13. 台式电脑添加共享计算机,台式电脑怎么设置wifi共享
  14. 怎么用大众都懂的语言解释黎曼空间?
  15. 解决java中使用getImage()导入图片失败问题
  16. 关于activity的生命周期1
  17. 《视觉SLAM十四讲》学习笔记:第5讲相机与图像
  18. android qq接口,手机QQ Scheme接口
  19. 关于斐讯K2路由器 j.s9w.cc 劫持的问题。
  20. mysql8.0.15mis百度网盘_mysql-installer-community-8.0.15.0数据库的安装

热门文章

  1. 细聊分布式ID生成方法-2
  2. ssh提示connection refused_2020高考语法填空必会技巧之有提示词(一)
  3. JavaScript 代码片段
  4. java list to byte_java – 将ArrayList转换为byte []
  5. vscode安装旧版本插件_2020 我在使用VScode时安装的插件(针对前端开花推荐)
  6. birt java api_「Birt」birt api生成报表 | 学步园
  7. java数据库打包_java程序需要连接数据库 如何打包
  8. qtreeview编辑节点文本_[我花2个月做了叙事短篇游戏]我是怎么做游戏编辑工具的...
  9. excel 显示超链接_临下班老板让我创建几百个超链接跳转,我就用了1秒,绝不加班...
  10. matlab保存f黑白图片_Matlab微积分