`

多参数构造函数

    博客分类:
  • java
 
阅读更多

在一个类有很多的值要初始化时,可以通过在构造函数中给它传初始值,例如:

 

这这样的构造函数给调用者带来了很多的不便,会引起调用者分不清各个参数的意义,代码也不容易读。

另外一种方法是使用JavaBean。既是在构造函数中只给出必要的初始化参数,可选参数以setter的方式来设置,例如:

 

但是JavaBean的形式是把初始参数各构造一个类的实例分开来完成的,但是这种形式的自由度太大,可以在任何时候改变实例的属性值。

 

最好的一种方式是为这样的类写一个内部的Builder。如下:

 

然后通过这种方式来调用:

 

package com.qualityeclipse.sample;

import java.util.Date;

public class Timezone {
	private final float offset;
	private final float asc;
	private final String name;
	private final String id;
	private Date date;

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public float getOffset() {
		return offset;
	}

	public float getAsc() {
		return asc;
	}

	public String getName() {
		return name;
	}

	public String getId() {
		return id;
	}

	private Timezone(Builder builder) {
		offset = builder.offset;
		asc = builder.asc;
		name = builder.name;
		id = builder.id;
	}

	public static class Builder {
		private float offset;
		private float asc;
		private String name;
		private String id;

		public Builder offset(float offset) {
			this.offset = offset;
			return this;
		}

		public Builder asc(float asc) {
			this.asc = asc;
			return this;
		}

		public Builder name(String name) {
			this.name = name;
			return this;
		}

		public Builder id(String id) {
			this.id = id;
			return this;
		}

		public Timezone build() {
			return new Timezone(this);
		}
	}
}

 

 

以上内容选自:《Effective Java》第二版 英文版第11页至第15页。

分享到:
评论

相关推荐

    详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种...注意:构造函数可以被重载,可以多个,可以带参数;析构函数只有一个,不能被重载,不带参数 而默认构造函数没有参数,它什么也不做

    WPF下使用MEF导入带参数构造函数的用户控件

    本篇文章将详细探讨如何在WPF环境中,使用MEF来导入具有参数构造函数的用户控件。 首先,理解MEF的基本概念是至关重要的。MEF是一种轻量级的插件框架,允许开发者创建松散耦合的应用程序。它通过提供一种方式来发现...

    在派生类的构造函数中调用基类的构造函数

    如果没有在派生类的初始化列表中指定,编译器会默认调用基类的无参数构造函数(如果存在的话)。例如: ```cpp class Derived : public Base { public: Derived() { // 默认调用Base的无参构造函数 // ... } ...

    构造函数与析构函数

    构造函数是一个与类同名的方法,可以没有参数,有一个参数或多个参数,但是构造函数没有返回值。如果构造函数没有参数,该函数被称为类的默认构造函数。 (1) 一个类可以包含多个构造函数,各个构造函数之间通过...

    包含构造函数和析构函数的C++程序

    构造函数可以被重载,这意味着一个类可以有多个构造函数,但每个构造函数的参数列表必须不同。 在提供的代码示例中,定义了一个名为`Student`的类,其中包含了一个构造函数: ```cpp Student(int n, string nam, ...

    C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar

    在C++编程中,对象的构造过程涉及到多个层面,包括对象成员构造函数、基类构造函数以及派生类本身的构造函数。理解它们的执行顺序对于编写健壮的代码至关重要。以下将详细阐述这三个构造函数的调用时机和逻辑。 1. ...

    Java继承时构造函数的调用

    对于`st1`,因为没有传递任何参数,所以`Student`的无参数构造函数被调用,接着它调用了`Person`的无参数构造函数。对于`st2`,调用了`Student`的三参数构造函数,但由于`Person`类没有匹配的构造函数,编译器会报错...

    继承带参数的构造函数的使用

    声明一个带参数的构造函数,该构造函数继承基类base中的带参数的构造函数

    构造函数的继承问题 笔记

    3. **构造函数重载与父类构造函数的选择**:如果父类中有多个构造函数,子类可以通过`super()`后跟相应的参数列表来选择调用哪一个父类构造函数。 例如: ```java class Base { public Base() { System.out....

    构造函数和析构函数PPT课件.pptx

    构造函数可以带参数,也可以不带参数,并且可以指定参数的缺省值。 构造函数的特点: 1. 构造函数名字必须与类名相同。 2. 构造函数是成员函数,函数体可写在类体内,也可写在类体外。 3. 构造函数是一个特殊的...

    C#构造函数的理解

    - **使用多个构造函数**:类可以定义多个构造函数,这些构造函数可以有不同的参数列表。这种灵活性使得类可以在不同的情况下使用不同的初始化逻辑。 - **构造函数重载**:通过定义多个具有不同参数列表的构造函数,...

    枚举类型与构造函数.doc

    在上面的代码中,我们使用了两个构造函数来实例化ming对象,第一个构造函数没有参数,第二个构造函数有两个参数likes和hope。 在子类中,我们可以使用super关键字来调用父类的构造函数,例如: ```java public ming...

    构造函数与静态块的执行顺序

    构造函数可以被重载,即在同一个类中可以有多个具有不同参数列表的构造函数。 静态块(`static`)是在类定义中包含的一段特殊的代码块,它在类加载时执行,而不是在对象创建时执行。静态块常用于初始化静态变量或...

    重写重载构造函数

    在C#中,构造函数可以有多个,但它们的方法签名不能相同。 默认构造函数是无参数的构造函数。无论何时,只要使用new运算符实例化对象,并且不为new提供任何参数,就会调用默认构造函数。如果类不是静态的,C#编译器...

    参数传递的总结——构造函数

    5. **构造函数重载**:一个类可以有多个构造函数,它们的参数列表不同,这种现象称为构造函数的重载。这使得我们可以根据需要以不同的方式创建对象。 6. **构造函数链**:当一个类继承自另一个类时,子类的构造函数...

    构造函数(转)

    - **定义**:当一个类没有定义任何构造函数时,编译器会自动生成一个默认的无参数构造函数。此构造函数为空,不做任何操作。 - **示例**: ```cpp class Complex { public: Complex() { m_real = 0.0; m_imag ...

    C++构造函数重载

    当一个类有多个构造函数,每个函数具有不同的参数列表时,我们称这种情况为构造函数的重载(Overloaded Constructors)。这种特性使得我们可以根据需要以不同的方式创建类的对象,提高了代码的可读性和灵活性。 ...

    18_构造函数 视频

    构造函数可以有参数,也可以无参数,根据不同的参数列表,我们可以定义多个重载的构造函数,以便在创建对象时提供不同的初始化方式。 构造函数分为两种类型:默认构造函数和自定义构造函数。默认构造函数是编译器...

    C#多态性实例,向基类构造函数传递参数.rar

    综上所述,这个"C#多态性实例,向基类构造函数传递参数"的示例展示了如何在C#中利用多态性、继承和构造函数来创建灵活、可扩展的代码结构。通过理解和应用这些概念,开发者可以编写出更高效、更具维护性的软件系统。

    Python 含参构造函数实例详解

    - **多个构造函数**:尽管Python不支持多重构造函数的概念(即一个类不能有多个不同签名的构造函数),但我们可以通过提供默认参数值来模拟多重构造函数的效果。例如,可以在构造函数中设置某些参数的默认值,从而...

Global site tag (gtag.js) - Google Analytics