方法签名中的Java“参数”?


112

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

我相当确定Java支持类似的行为,但是我不知道如何做到这一点。

Answers:


194

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

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

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


3
谢谢,我在寻找其他东西时亲自发现了这个问题,并亲自来到这里回答问题。
奥马尔·库赫吉

11

这将在Java中达到目的

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

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


3

正如在先前答案中所写的那样,它是varargsellipsis...)声明的

此外,您可以传递值类型和/或引用类型,也可以将两者混合使用(google Autoboxing)。另外,您可以将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 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.