«Параметры» Java в сигнатуре метода?

112

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

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

Омар Кухеджи
источник

Ответы:

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

Как написано в предыдущих ответах, он varargsобъявлен с помощью ellipsis( ... )

Более того, вы можете передавать типы значений и / или ссылочные типы или оба смешанные (Google 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 
Левент Дивилиоглу
источник