问题
在C#中,如果希望方法具有不确定数量的参数,则可以在方法签名aparams
中创建最终参数,使得方法参数看起来像一个数组,但允许使用该方法的每个人传递该类型的参数。来电者想要的。
我很确定Java支持类似的行为,但我不知道如何做到这一点。
#1 热门回答(180 赞)
在Java中,它被称为varargs,语法看起来像一个常规参数,但在类型后面有一个省略号("..."):
public void foo(Object... bar) {
for (Object baz : bar) {
System.out.println(baz.toString());
}
}
vararg参数必须始终是方法签名中的最后一个参数的,并且可以像访问该类型的数组一样进行访问(例如,在这种情况下为Object[]
)。
#2 热门回答(11 赞)
这将在Java中发挥作用public void foo(String parameter, Object... arguments);
你必须添加三个点...
和varagr
参数必须是方法签名中的最后一个。
#3 热门回答(2 赞)
正如以前的答案所写,它是varargs
并声明为ellipsis
(...)
此外,你可以传递值类型和/或引用类型,也可以两者混合使用(googleAutoboxing)。此外,你可以将method参数用作数组,如下面的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