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ć.

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).


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.


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 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.