一个方法的变量参数数目

是否可以声明一个允许参数数目可变的方法?

定义中使用了什么符号来表示该方法应该允许一个可变数目的参数?

答案: varargs

235610 次浏览

没错。你可以在 关于 varargs 的 Oracle 指南中找到更多关于它的信息。

这里有一个例子:

void foo(String... args) {
for (String arg : args) {
System.out.println(arg);
}
}

可以称之为

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.

是的,有可能:

public void myMethod(int... numbers) { /* your code */ }
Variable number of arguments

可以向一个方法传递数量可变的参数 有一些限制:

  • 参数的可变数目必须都是相同的类型
  • 它们被视为方法内的数组
  • 它们必须是方法的最后一个参数

要理解这些限制,请考虑以下代码片段中用于返回整数列表中最大整数的方法:

private static int largest(int... numbers) {
int currentLargest = numbers[0];
for (int number : numbers) {
if (number > currentLargest) {
currentLargest = number;
}
}
return currentLargest;
}

资料来源甲骨文认证助理 JavaSE7程序员学习指南2012

对于不同类型的参数,有 3点:

public void foo(Object... x) {
String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
}

那就宣布吧

foo("Hii");
foo("Hii", 146);

为了安全起见,请这样使用:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

这种方法的主要缺点是,如果可选参数的类型不同,就会丢失静态类型检查。 请看 更多的变化

是的 Java 允许 vargs在方法参数中。

public class  Varargs
{
public int add(int... numbers)
{ 
int result = 1; 
for(int number: numbers)
{
result= result+number;  
}  return result; 
}
}