posts - 8,  comments - 6,  trackbacks - 0

1.5  使用多个参数:编写Vararg方法

Java5+

Java编程人员常常需要为方法定义一个包含多个值的参数。这时可以采用List或数组的形式,如下例所示。

public int add(int[] list) {
int sum = 0;
for (int i=0; i < list.length; i++) {
sum += list[i];
}
return sum;
}


也可以将它实现为几个重载的方法,每个方法接受不同数量的int参数。这样做有时可以令方法更容易使用,因为调用代码不需要首先创建一个数组。

public int add(int a, int b) {
return a + b;
}

public int add(int a, int b, int c) {
return a + b + c;
}

public int add(int a, int b, int c, int d) {
return a + b + c + d;
}


如果只有少量值,这对于调用代码更为方便,因为现在可以使用add(12,14,16)来代替add(new int[] {12,14,16})。但是,编写类似这样的方法存在问题,需要为每种可能的参数组合编写不同版本的方法。如果希望在方法的使用方式上具有最大的灵活性则与其创建一个庞大的具有上千个方法的类,不如对重载的方法接受的参数数量进行很小的限制。

在Java 5中,可以编写一个方法以使它允许可变数量的参数并让编译器完成将列表包装到一个数组中的操作。虽然内部仍是处理数组,但此时的编译器已隐藏了细节。以下的代码使用可变参数(vararg)重写了add方法。

public int add(int... list) {
int sum = 0;
for (int item : list) {
sum += item;
}
return sum;
}

注意,那些奇怪的圆点正是可变参数的实际语法!并且,由于这种改动要用到Java 5,我们也可以趁机使用Java 5增强的for循环语法。一旦按照这种方式编写了方法,可以使用实际数量的参数来调用它!此外,还可以传递一个作为参数的数组(但不允许是List或Collection对象):

add(1,3,5,7,9,11,13,15,17,19,21,23,25);
add(new int[] {12,14,16});
需要注意的是当定义一个参数列表时该语法只能使用一次,并且它必须是最后一项。以下的代码不能正常运行,因为可变参数不是最后一项:

public void badMethod(int... data, String comment) { } // wrong!
必须将此代码改写成以下形式:

public void goodMethod(String comment, int... data) { }
在一些情况下,在方法定义中使用可变参数可以使方法更简便。这在参数列表包含字面(硬编码)值的情况下尤其如此,如上面的示例中给出的int值。


只有注册用户登录后才能发表评论。


网站导航:
 

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜