【发布时间】:2011-01-20 19:36:52
【问题描述】:
是否可以声明一个允许可变数量参数的方法?
定义中使用什么符号表示该方法应允许可变数量的参数?
答案:可变参数
【问题讨论】:
-
自从作业以来,我们不想知道你的问题,我们只想知道你在学习。
标签: java methods arguments parameter-passing variadic-functions
是否可以声明一个允许可变数量参数的方法?
定义中使用什么符号表示该方法应允许可变数量的参数?
答案:可变参数
【问题讨论】:
标签: java methods arguments parameter-passing variadic-functions
是的,有可能:
public void myMethod(int... numbers) { /* your code */ }
【讨论】:
对于不同类型的参数,有 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("..."); }
这种方法的主要缺点是,如果可选参数的类型不同,则会失去静态类型检查。 请参阅more variations。
【讨论】:
是的,Java 允许在方法参数中使用vargs。
public class Varargs
{
public int add(int... numbers)
{
int result = 1;
for(int number: numbers)
{
result= result+number;
} return result;
}
}
【讨论】:
没错。您可以在the Oracle guide on varargs 找到更多相关信息。
这是一个例子:
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.
【讨论】:
Object...。
Object... args 将与原语一起使用,因为autoboxing。
varargs.length
Variable number of arguments
可以将可变数量的参数传递给方法。然而,有 有一些限制:
要了解这些限制,请考虑以下代码 sn-p 中用于返回整数列表中最大整数的方法:
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
【讨论】:
是的...从 Java 5 开始:http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
【讨论】: