Javavariables编号或方法的参数

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

定义中使用的象征是什么,表示该方法应该允许可变数目的参数?

答案:可变参数

这是正确的。 您可以在Oracle可变参数指南中find更多关于它的信息 。

这是一个例子:

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) { ... } 
 Variable number of arguments 

可以将一个可变数量的parameter passing给一个方法。 但是,有一些限制:

  • 可变数量的参数必须全部是相同的types
  • 它们在方法内被视为一个数组
  • 它们必须是该方法的最后一个参数

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

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

源Oracleauthentication助理Java SE 7程序员学习指南2012

是的…自Java 5以来: http : //java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

如果你可能使用不同types的参数,那么使用:

 public void foo(Object... x) { String first = x.length > 0 ? (String)x[0] : "Hello"; int duration = x.length > 1 ? Integer.parseInt((String) x[1]) : 888; } foo("Hii", ); foo("Hii", 146); 

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

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

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

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