Java „params” w sygnaturze metody?

112

W języku C #, jeśli chcesz, aby metoda miała nieokreśloną liczbę parametrów, możesz ustawić końcowy parametr w sygnaturze metody a, paramsaby parametr metody wyglądał jak tablica, ale wszyscy używający metody mogą przekazywać jak najwięcej parametrów tego typu jak chce dzwoniący.

Jestem prawie pewien, że Java obsługuje podobne zachowanie, ale nie mogę dowiedzieć się, jak to zrobić.

Omar Kooheji
źródło

Odpowiedzi:

194

W Javie nazywa się varargs , a składnia wygląda jak zwykły parametr, ale z wielokropkiem („...”) po typie:

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

Parametr vararg musi zawsze być ostatnim parametrem w sygnaturze metody i jest dostępny tak, jakbyś otrzymała tablicę tego typu (np. Object[]W tym przypadku).

David Grant
źródło
3
Dzięki. Dziwnie się o tym dowiedziałem, szukając czegoś innego i przyjeżdżając tutaj, aby samemu odpowiedzieć na to pytanie.
Omar Kooheji
11

To załatwi sprawę w Javie

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

Musisz dodać trzy punkty, ...a varagrparametr musi być ostatnim w sygnaturze metody.

Stefano Driussi
źródło
3

Jak napisano na poprzednich odpowiedziach, jest varargsi zadeklarowany z ellipsis( ... )

Ponadto możesz przekazać typy wartości i / lub typy referencyjne lub oba typy mieszane (Google Autoboxing ). Dodatkowo możesz użyć parametru metody jako tablicy, jak pokazano printArgsAlternatew poniższej metodzie.

Kod demonstracyjny

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();
    }

}

Wynik

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
Levent Divilioglu
źródło