Java "params" в сигнатуре метода?


В C#, если вы хотите, чтобы метод имел неопределенное количество параметров, вы можете сделать окончательный параметр в сигнатуре метода a params Так что параметр метода выглядит как массив, но позволяет всем, кто использует метод, передавать столько параметров этого типа, сколько хочет вызывающий.

Я уверен, что Java поддерживает подобное поведение, но я не могу выяснить, как это сделать.

3 100

3 ответа:

в Java это называется varargs, и синтаксис выглядит как обычный параметр, но с троеточием ("...") после типа:

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

параметр с переменным числом аргументов должно всегда быть последние параметр в сигнатуре метода и доступен, как если бы вы получили массив этого типа (например,Object[] в данном случае).

Это будет делать трюк в Java

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

вы должны добавить три очка ... и varagr параметр должен быть последним в сигнатуре метода.

как написано на предыдущих ответах, это varargs и заявил с ellipsis (...)

кроме того, вы можете либо передать типы значений и / или ссылочные типы, либо оба смешанные (google Автоупаковка). Кроме того, вы можете использовать параметр метода в виде массива, как показано на рисунке с 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