Java "params" nella firma del metodo?


112

In C #, se si desidera che un metodo abbia un numero indeterminato di parametri, è possibile impostare il parametro finale nella firma del metodo in paramsmodo che il parametro del metodo assomigli a un array ma consenta a chiunque utilizzi il metodo di passare il maggior numero di parametri di quel tipo come vuole il chiamante.

Sono abbastanza sicuro che Java supporti un comportamento simile, ma non riesco a scoprire come farlo.

Risposte:


194

In Java si chiama varargs e la sintassi sembra un parametro normale, ma con i puntini di sospensione ("...") dopo il tipo:

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

Il parametro vararg deve essere sempre l' ultimo parametro nella firma del metodo e vi si accede come se si ricevesse un array di quel tipo (ad esempio Object[]in questo caso).


3
Grazie, l'ho scoperto bruscamente da solo mentre cercavo qualcos'altro, e stavo venendo qui per rispondere alla domanda da solo.
Omar Kooheji

11

Questo farà il trucco in Java

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

Devi aggiungere tre punti ...e il varagrparametro deve essere l'ultimo nella firma del metodo.


3

Come è scritto nelle risposte precedenti, è varargsdichiarato con ellipsis( ... )

Inoltre, puoi passare i tipi di valore e / o i tipi di riferimento o entrambi misti (Google Autoboxing ). Inoltre è possibile utilizzare il parametro del metodo come un array come mostrato con il printArgsAlternatemetodo in basso.

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

}

Produzione

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.