可变长度参数介绍

可变长度参数介绍

顾名思义,可变长度参数就是指在方法的参数体中,只要定义恰当,我们可以使用任意数量的参数,类似于使用对象数组。在J2SE 5.0中,一个新的语法被引入,就是在参数类型名称后面加上 ... ,表示该方法可以接受多个该类型的参数。需要说明的是可变长度参数必须放在参数列表的最后,且一个方法只能包含一个这样的参数。

需要注意的是,这个语法只是在声明一个方法的时候管用,真正当我们具体实现这个方法时,我们通常都不这么写,因为这样写的话在方法体内该参数仅仅被当作一个Object,并不能通过这个Object的方法调用获取有意义的对象数组。所以通常我们都是在声明一个方法时使用 ... 这样的语法,而在具体实现时使用数组。编译器会处理这种差异,把它们当作相同的方法签名。看下面的例子:

interface ITestVarargs {
public void vararg(Object... args);
}

class MyVarargs implements ITestVarargs {
public void vararg(Object[] args) {
// ...
}
}


在J2SE 5.0中,还有一个很重要的新特性是基于可变长度参数的,那就是格式化输出,我会在稍后的专题作更详细地说明。

有关可变长度参数的更详细说明,参考这里。




 

[更新]

纠正一下:我上面对Object...这样形式的签名理解有问题,其实如果一个方法的签名是类似Object... args的话,在方法体内部,args被当作Object数组处理,于是可以以Object[]同样的方式操作,如args.length或者args[0]等等。所以看上去代码应该是这个样子更合适些:

interface ITestVarargs {
public void vararg(Object... args);
}

class MyVarargs implements ITestVarargs {
public void vararg(Object... args) {

// ...
}
}

见笑了。