西西河

主题:【原创】Java 1.5新特点的一些体验 -- 老兵帅客

共:💬14 新:
全看分页树展 · 主题 跟帖
家园 5. varargs变长参数表

传统上处理变长参数的办法是将变化部分弄成数组,然后使用数组加数组长度的办法(例如C语言的Main函数)或者只使用数组(例如Java,因为Java的数组含有长度信息)来传入到方法中进行处理。但是这种方法的问题在于要求所有参数的类型是一致的,否则无法构成数组,除非都变成Object,但是这样做的成本有时候会比较高;而且这样做的一个代价就是无法有效地对实际参数进行检验。

Java 1.5的变长参数表的实现就是使用上述的方法,这样程序员就可以比较简单地处理变长参数表问题了,它的优点和缺点上面都已经涉及到了。下面是它的一个例子。

package com.oreilly.tiger.ch05;

public class Guitar {

private String builder;

private String model;

private float nutWidth;

private GuitarWood backSidesWood;

private GuitarWood topWood;

private GuitarInlay fretboardInlay;

private GuitarInlay topInlay;

private static final float DEFAULT_NUT_WIDTH = 1.6875f;

public Guitar(String builder, String model, String... features) {

this(builder, model, null, null, DEFAULT_NUT_WIDTH, null, null, features);

}

public Guitar(String builder, String model,

GuitarWood backSidesWood, GuitarWood topWood,

float nutWidth, String... features) {

this(builder, model, backSidesWood, topWood, nutWidth, null, null, features);

}

public Guitar(String builder, String model,

GuitarWood backSidesWood, GuitarWood topWood,

float nutWidth,

GuitarInlay fretboardInlay, GuitarInlay topInlay,

String... features) {

this.builder = builder;

this.model = model;

this.backSidesWood = backSidesWood;

this.topWood = topWood;

this.nutWidth = nutWidth;

this.fretboardInlay = fretboardInlay;

this.topInlay = topInlay;

}

}

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河