Welcome 微信登录

首页 / 软件开发 / JAVA / Effective Java (2) 遇到多个构造器参数时要考虑用构建器

Effective Java (2) 遇到多个构造器参数时要考虑用构建器2014-08-24一、背景

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

①. 重叠构造器模式

②. 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);}}