114

在 C# 中,如果您希望方法具有不确定数量的参数,您可以将方法签名中的最后一个参数设置为 a params,以便方法参数看起来像一个数组,但允许使用该方法的每个人传递尽可能多的该类型参数如来电者所愿。

我相当确定 Java 支持类似的行为,但我不知道该怎么做。

4

3 回答 3

200

在 Java 中它被称为varargs,语法看起来像一个常规参数,但在类型后面有一个省略号(“...”):

public void foo(Object... bar) {
    for (Object baz : bar) {
        System.out.println(baz.toString());
    }
}

vararg 参数必须始终是方法签名中的最后一个参数,并且就像您收到该类型的数组一样被访问(例如Object[],在这种情况下)。

于 2009-02-06T10:06:25.703 回答
11

这将在 Java 中解决问题

public void foo(String parameter, Object... arguments);

您必须添加三个点...,并且varagr参数必须是方法签名中的最后一个。

于 2009-02-06T10:07:18.197 回答
3

正如之前的答案所写的那样,它是varargsellipsis( ... )声明的

此外,您可以传递值类型和/或引用类型或两者混合(谷歌自动装箱)。此外,您可以将方法参数用作数组,如下面的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 
于 2016-03-31T12:46:59.983 回答