166

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

定义中使用的符号表示该方法应允许可变数量的参数是什么?

答案:可变参数

4

6 回答 6

298

这是正确的。您可以在关于 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.
于 2010-02-25T01:27:46.650 回答
18

是的,有可能:

public void myMethod(int... numbers) { /* your code */ }
于 2010-02-25T01:28:23.617 回答
16
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;
}

来源 Oracle Certified Associate Java SE 7 Programmer Study Guide 2012

于 2014-09-05T08:51:35.140 回答
13

对于不同类型的参数,有3-dots

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("..."); }

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

于 2017-01-15T19:05:55.723 回答
6

是的......因为Java 5:http: //java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

于 2010-02-25T01:27:48.400 回答
0

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

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
于 2017-10-20T02:56:52.877 回答