【发布时间】:2009-02-06 10:04:31
【问题描述】:
在C#中,如果你想让一个方法的参数数量不定,你可以把方法签名中的最后一个参数设为params,这样方法参数看起来像一个数组,但允许每个使用方法的人通过调用者需要多少该类型的参数。
我相当肯定 Java 支持类似的行为,但我不知道该怎么做。
【问题讨论】:
标签: java variadic-functions params method-declaration
在C#中,如果你想让一个方法的参数数量不定,你可以把方法签名中的最后一个参数设为params,这样方法参数看起来像一个数组,但允许每个使用方法的人通过调用者需要多少该类型的参数。
我相当肯定 Java 支持类似的行为,但我不知道该怎么做。
【问题讨论】:
标签: java variadic-functions params method-declaration
在 Java 中它被称为varargs,语法看起来像一个常规参数,但在类型后面有一个省略号(“...”):
public void foo(Object... bar) {
for (Object baz : bar) {
System.out.println(baz.toString());
}
}
可变参数参数必须始终是方法签名中的last参数,并且在访问时就像您收到该类型的数组一样(例如,Object[] 在此案例)。
【讨论】:
这将在 Java 中发挥作用
public void foo(String parameter, Object... arguments);
您必须添加三个点... 并且varagr 参数必须是方法签名中的最后一个。
【讨论】:
正如之前的答案所写,它是varargs 并用ellipsis 声明(...)
此外,您可以传递值类型和/或引用类型或两者混合(谷歌 Autoboxing)。此外,您可以将方法参数用作数组,如下面的printArgsAlternate 方法所示。
public class VarargsDemo {
public static void main(String[] args) {
printArgs(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
printArgsAlternate(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
}
private static void printArgs(Object... arguments) {
System.out.print("Arguments: ");
for(Object o : arguments)
System.out.print(o + " ");
System.out.println();
}
private static void printArgsAlternate(Object... arguments) {
System.out.print("Arguments: ");
for(int i = 0; i < arguments.length; i++)
System.out.print(arguments[i] + " ");
System.out.println();
}
}
Arguments: 3 true Hello! true 25.3 a X
Arguments: 3 true Hello! true 25.3 a X
【讨论】: