是否可以声明一个允许参数数目可变的方法?
定义中使用了什么符号来表示该方法应该允许一个可变数目的参数?
答案: varargs
没错。你可以在 关于 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.
是的... 从 Java 5: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html开始
是的,有可能:
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("..."); }
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }
这种方法的主要缺点是,如果可选参数的类型不同,就会丢失静态类型检查。 请看 更多的变化。
是的 Java 允许 vargs在方法参数中。
vargs
public class Varargs { public int add(int... numbers) { int result = 1; for(int number: numbers) { result= result+number; } return result; } }