在Java1.5中创建可变参数[Varargs] (2)
首先,你要习惯的书写省略号(……)。这三个小点是可变参数的关键,你将会经常键入它们。下面是Guitar类的构造器使用可变参数来接受不确定数量字符串的一个例子:
public Guitar(String builder, String model, String……features);
参数String…… features 表明任何数量的字符串都可能被接受。 所以,下面所有的调用都合法的。
Guitar guitar = new Guitar("Martin", "HD-28V","Hot-rodded by Dan Lashbrook", "Fossil Ivory Nut","Fossil Ivory Saddle", "Low-profile bridge pins");
Guitar guitar = new Guitar("Bourgeois", "OMC","Incredible flamed maple bindings on this one.");
Guitar guitar = new Guitar("Collings", "OM-42","Once owned by Steve Kaufman--one of a kind");
You could add the same variable-length argument to the other constructors:
public Guitar(String builder, String model,
GuitarWood backSidesWood, GuitarWood topWood,float nutWidth, String... features)
public Guitar(String builder, String model,
GuitarWood backSidesWood, GuitarWood topWood,float nutWidth,
GuitarInlay fretboardInlay,GuitarInlay topInlay,String... features)
例5-1描写了一个把所有的这些特性放在一起的简单类,甚至使用XX来一起传递一些可变参数。
Example 5-1. Using varargs in constructors
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;
}
}
刚才发生了什么?
当你指定了一个可变长度参数列表,Java编译器实际上读入 “create an array of type <参数类型>”。你键入:
public Guitar(String builder, String model, String…… features)
然而:编译器解释这些为:
public Guitar(String builder, String model, String[] features)
这意味着重复参数列表变得简单(这将在“重复可变长度参数列表”里讲述),这与你需要完成的其他程序设计目标是一样。
你可以像使用数组一样来使用可变参数。
然而,这同样存在一些限制。第一,在每个方法中,你只可以使用一次省略号。所以,下面的书写是不合法


您的位置:
