[Effective Java 读书笔记] 第二章 创建和销毁对象 第二条
第二条 遇到多个构造器参数时,可以考虑用构建器
当遇到有多个构造器参数时,常见的是用重叠构造器,即:
public class TestClass{
public TestClass(int para0){
this(para0,0);
}
public TestClass(int para0,int para1){
this(para0,para1,0);
}
public TestClass(int para0,int para1,int para2){
this.para0 = para0;
this.para1 = para1;
this.para2 = para2;
}
}
当需要的参数多了以后,上述方法难以阅读,参数含义不太明显,一长串类型相同的参数也容易有微妙的错误,比如颠倒等。
而如果使用JavaBeans模式,即为每个参数创建一个setter的方法,这样可读性提高,每个参数的设置都有含义,但是整个构建方法被分为几个调用,导致构建过程中处于不一致的状态,需要额外保证线程安全
推荐使用 Builder模式,抄了网上的一个代码段:
public class DoDoContact {
private final int age;
private final int safeID;
private final String name;
private final String address; public int getAge() {
return age;
} public int getSafeID() {
return safeID;
} public String getName() {
return name;
} public String getAddress() {
return address;
} public static class Builder {
private int age = 0;
private int safeID = 0;
private String name = null;
private String address = null; // 构建的步骤
public Builder(String name) {
this.name = name;
} public Builder age(int val) {
age = val;
return this;
} public Builder safeID(int val) {
safeID = val;
return this;
} public Builder address(String val) {
address = val;
return this;
} public DoDoContact build() { // 构建,返回一个新对象
return new DoDoContact(this);
}
} private DoDoContact(Builder b) {
age = b.age;
safeID = b.safeID;
name = b.name;
address = b.address; }
} //调用:
DoDoContact ddc =
new
DoDoContact.Builder(
"Ace"
).age(
10
)
.address(
"beijing"
).build();
[Effective Java 读书笔记] 第二章 创建和销毁对象 第二条的更多相关文章
- [Effective Java 读书笔记] 第二章 创建和销毁对象 第一条
第二章 创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法 ...
- 《Effective Java》第1章 创建和销毁对象
第1条 用静态工厂方法代替构造器 这个静态工厂,与设计模式中的静态工厂不同,这里的静态工厂方法,替换为“静态方法”比较好理解,主要就是建议编写静态方法来创建对象. 使用静态方法的好处: 1.静态方法有 ...
- 《Effective Java》第2章 创建和销毁对象
第2条:遇到多个构造器参数时要考虑用构建器 与构造器相比,builder的微略优势在于,builder可以有多个可变(varargs)参数.构造器就像方法一样,只能有一个可变参数.因为builder利 ...
- [Effective Java]第二章 创建和销毁对象
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 《Effective Java》读书笔记一(创建与销毁对象)
No1 考虑用静态工厂方法代替构造器 静态工厂方法优势: 它们有名称,阅读性增强,如:BigInteger.probablePrime: 不必每次调用它们的时候都创建一个新对象: 它们可以返回原返回类 ...
- Effictive Java学习笔记1:创建和销毁对象
建议1:考虑用静态工厂方法代替构造器 理由:1)静态方法有名字啊,更容易懂和理解.构造方法重载容易让人混淆,并不是好主意 2)静态工厂方法可以不必每次调用时都创建一个新对象,而公共构造函数每次调用都会 ...
- [Effective Java读书笔记] 第二章 创建和销毁对象(1~7)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537576.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- [Effective Java 读书笔记] 第二章 创建和销毁对象 第六-七条
第六条 消除过期引用 JAVA中依然会有 memory leak的,比如一个栈先增长再收缩,那么从栈中弹出的对象是不会被当做垃圾回收的,即时使用栈的程序不再引用这些对象.这是因为栈的内部维护着对这些对 ...
- [Effective Java 读书笔记] 第二章 创建和销毁对象 第五条
第五条 避免创建不必要的对象 书中一开始举例: String s = new String("stringette"); // don't do this //应该使用下面,只会创 ...
随机推荐
- linux下解压缩文件中文乱码问题的解决
在windows上压缩的文件,是以系统默认编码中文来压缩文件.由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码. 虽然2005年就有人把这报告为bu ...
- php部署后错误排查流程
未使用框架的php程序不可用时,没有框架提供的调试信息,因此要按照请求的整个生命周期来调试程序, 具体错误依次排查网络,服务器,环境,代码的步骤层层深入,最终定位到错误的发生点. 1 访问程序部署的服 ...
- linux入门系列7--管道符、重定向、环境变量
前面文章我们学习了linux基础命令,如果将不同命令组合使用则可以成倍提高工作效率.本文将学习重定向.管道符.通配符.转义符.以及重要的环境变量相关知识,为后面的shell编程打下基础. 一.IO重定 ...
- 初探ASP.NET Core 3.x (1) - 关于ASP.NET Core
I 什么是ASP.NET Core ASP.NET is an open source web framework, created by Microsoft, for building modern ...
- Manacher 学习
推荐博客 :https://blog.csdn.net/zzkksunboy/article/details/72600679 作用 线性时间解决最长回文子串问题. 思想 Manacher充分利用了回 ...
- 前端笔记7-js3
1.方法: //创建一个对象var obj = {name:"孙悟空",age:18}; //对象的属性也可以是对象 obj.brother = {name:"猪八戒&q ...
- Jenkins Pipeline Job构建配置
1.创建pipeline job任务,新建任务>输入任务名称>选择“流水线”>点击[确定] 添加描述,This is my first test pipelin ...
- crawler 听课笔记 碎碎念 1 初步了解各种选择器极其简单的使用
css中 身份证 id对应# 衣服 class对应 . 图片 pyquery...as pq html= request.get(url=''.....'') doc=pq(html) d ...
- ES.01.Elasticsearch安装配置
Windows版 提纲: 1. 安装Elasticsearch 1.1. 下载Elasticsearch: https://www.elastic.co/cn/downloads/elastics ...
- vue引用外部JS的两种种方案
前言 肯定会遇到没有npm化的库 自己写的js 方法 在Vue中该怎么引用呢 第一种 如果库是es6写的 就可以用import 引入 比如我自己写的http 封装接口的方法 就可以这样子导入哦 第二种 ...