Java "params" w podpisie metody?

W C#, jeśli chcesz, aby metoda miała nieokreśloną liczbę parametrów, możesz sprawić, że końcowy parametr w sygnaturze metody będzie params, tak aby parametr metody wyglądał jak tablica, ale pozwalał wszystkim używającym metody przekazać tyle parametrów tego typu, ile chce wywołujący.

Jestem całkiem pewien, że Java wspiera podobne zachowania, ale nie mogę się dowiedzieć, jak to zrobić.

Author: Alvin Wong, 2009-02-06

3 answers

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

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

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

 182
Author: David Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-06 10:21:22

To da radę w Javie

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

Należy dodać trzy punkty ... i parametr varagr musi być ostatnim w sygnaturze metody.

 11
Author: Stefano Driussi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-27 10:00:51

Tak jak jest napisane na poprzednich odpowiedziach, jest varargs i deklarowane z ellipsis (...)

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

Kod Demo

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

}

Wyjście

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
 2
Author: Levent Divilioglu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 12:46:59