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; }}