Java "парами" в підписі методу?


112

У C #, якщо ви хочете, щоб у методу було невизначене число параметрів, ви можете зробити підсумковий параметр у підписі методу 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 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.