Effective Java (2) 遇到多个构造器参数时要考虑用构建器

一、背景

对于有多个可选参数的类,我们一般通过什么办法传递参数呢?这里提供了三种办法:

①. 重叠构造器模式

②. JavaBeans模式

③. Builder构建器模式

下面我们来分析一下以上三种方法的优势及弊端。

二、重叠构造器模式

重叠构造器模式中第一个构造器中只有必要参数,第二个构造器有一个可选参数,第三个构造器中有两个可选参数,依次类推,最后一个构造器中包含所有可选参数。这种方案可行,但是有较大缺陷。

缺点:当有很多可选参数的时候,客户端代码很难编写,并难以阅读,如果客户端不小心颠倒了其中两个参数的顺序,编译器也不会报错,但是程序在运行时会出现错误的行为。

/*
 * 构造器模式
 */
public class NutritionFacts1 {
    private int a1; // 必须
    private int a2; // 必须
    private int a3; // 可选
    private int a4; // 可选  

    public NutritionFacts1(int a1, int a2) {
        this(a1, a2, 0);
    }  

    public NutritionFacts1(int a1, int a2, int a3) {
        this(a1, a2, 0, 0);
    }  

    public NutritionFacts1(int a1, int a2, int a3, int a4) {
        this.a1 = a1;
        this.a2 = a2;
        this.a3 = a3;
        this.a4 = a4;
    }  

    public int getA1() {
        return a1;
    }  

    public void setA1(int a1) {
        this.a1 = a1;
    }  

    public int getA2() {
        return a2;
    }  

    public void setA2(int a2) {
        this.a2 = a2;
    }  

    public int getA3() {
        return a3;
    }  

    public void setA3(int a3) {
        this.a3 = a3;
    }  

    public int getA4() {
        return a4;
    }  

    public void setA4(int a4) {
        this.a4 = a4;
    }  

    public String toString() {
        return a1 + "-" + a2 + "-" + a3 + "-" + a4;
    }  

    public static void main(String[] args) {
        NutritionFacts1 nf = new NutritionFacts1(1, 2, 3, 4);
        System.out.println(nf);
    }
}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, 参数
, this
, int[] a={1
, public
, 模式
, 构造器
构造器模式
构建工作空间遇到问题、过梁遇到构造柱、遇到多个构造器、effective java、effective,以便于您获取更多的相关知识。

时间: 2024-09-01 14:33:37

Effective Java (2) 遇到多个构造器参数时要考虑用构建器的相关文章

Effective Java 笔记

创建和销毁对象 NO.1 考虑用静态工厂方法代替构造函数 静态工厂方法好处: 1.构造函数有命名的限制,而静态方法有自己的名字,更加易于理解. 2.静态工厂方法在每次调用的时候不要求创建一个新的对象.这种做法对于一个要频繁创建相同对象的程序来说,可以极大的提高性能.它使得一个类可以保证是一个singleton:他使非可变类可以保证"不会有两个相等的实例存在". 3.静态工厂方法在选择返回类型时有更大的灵活性.使用静态工厂方法,可以通过调用方法时使用不同的参数创建不同类的实例,还可以创建

适用于Android开发的Effective Java

"Effective Java" 被许多人看做是编写高效且可维护的 Java 代码的重要指导书之一.Android 使用 Java 开发是否意味着里面的建议都要用上?不完全是. 有些人认为这本书给出的大多数建议不适用于 Android 开发.在我看来,情况并非如此. 我认为这本书的一些部分是不适用,不管是因为不是所有 Java 功能都已优化到能与 Android 一起使用(例如枚举.序列化等),还是因为是移动设备的限制例如 Dalvik/ART 表现不同于桌面版的 JVM). 但不管怎

《Effective Java》—— 创建与销毁对象

本篇主要总结的是<Effecticve Java>中关于创建和销毁对象的内容. 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 如何管理对象销毁前的清理动作 考虑用静态工厂方法代替构造器 使用静态工厂的优势: 有名称 不必每次调用的时候都创建一个新的对象 返回原返回类型的任何子类型对象 在创建参数化类型实例时,代码更加简洁. 使用静态工厂的缺点: 类如果不包含公有的或者受保护的构造器,就不能被子类化 与其他的静态方法实际上没有任何区别 举个例子: public cla

Effective Java (1) 考虑用静态工厂方法代替构造器

一.前言 从今天开始计划用一个月的时间,通过写读书笔记的方式来记录阅读这本Java领域经典中的经典书籍 - Effective Java过程中自己所思所想,以备以后查阅,同时分享出去也希望可以帮助到其他人,废话不多说,现在开始第一篇:创建和销毁对象. 二.考虑用静态工厂方法代替构造器 ①. 一般我们有什么办法可以创建对象呢? 方法1: 使用类公有构造器. 方法2:使用类的静态方法返回一个实例. ②. 使用静态方法创建对象有什么优点? 优点1: 静态工厂方法的名字是由我们自己命名,而构造方法必须与

Effective Java Second Edition中文版已出版

http://yulimin.javaeye.com/blog/340464 我自己今天才刚见到书:) 译者序 Java从诞生到日趋完善,经过了不断的发展壮大,目前全世界拥有了成千上万的Java开发人员.如何编写出更清晰.更正确.更健壮且更易于重用的代码,是大家所追求的目标之一.作为经典Jolt获奖作品的新版书,它已经进行了彻底的更新,涵盖了自第1版之后所引入的Java SE 5和Java SE 6的新特性.作者探索了新的设计模式和语言习惯用法,介绍了如何充分利用从泛型到枚举.从注解到自动装箱的

和我一起学Effective Java之创建和销毁对象

前言 主要学习创建和销毁对象: 1.何时以及如何创建对象 2.何时以及如何避免创建对象 3.如何确保它们能够适时地销毁 4.如何管理对象销毁之前必须进行的清理动作 正文 一.用静态工厂方法代替构造器 获取类的实例的常用方法有: 1.公有的构造器 2.公有的静态工厂方法 下面通过Boolean类(基本类型boolean的包装类)的简单示例来学习: //公有的构造器 public Boolean(String s) { this(parseBoolean(s)); } //公有的静态工厂方法 pub

Effective Java --&amp;amp;gt;(一)创建和销毁对象

创建|对象 Effective Java学习笔记JAVA语言支持四种基本类型:接口(Interface).类(Class).数组(Array).和原语类型(Primitive).前三种类型通常被称为引用类型(reference type),类的实例和数组是对象(object),而原语类型的值不是对象.一个类的成员(member)包括它的域(field),方法(method),成员类(member class)和成员接口(member interface).一个方法的原型(signature)包括

Android 中的 Effective Java(速查表)

本文讲的是Android 中的 Effective Java(速查表), Effective Java 是一本被广泛认可的著作,它指明了在写 Java 代码时兼顾可维护性与效率的方式.Android 也是使用 Java 来开发的,这意味着前书中的所有建议仍旧可用,真的是这样吗?并不尽然.某些同学 认为书中的"大部分"建议都不适用于 Android 开发,但我认为并不是这样.我承认书中的部分建议确实不适用,因为并非所有 Java 特性都有针对 Android 优化(比如说枚举,序列化等等

Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记

声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com   书籍 <Effective Java 中文版> 03版 潘爱民译 本书介绍了57条极具实用价值的经验规则.这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案,通过对Java平台设计专家所使用的技术的全面描述,揭示了应坐什么和不应做什么,才能产生清晰.健壮和高效的代码.   正文  注意:条目和用语可能与书籍有所出入,但尽