¿Java "params" en la firma del método?

112

En C #, si desea que un método tenga un número indeterminado de parámetros, puede hacer que el parámetro final en la firma del método sea una paramspara que el parámetro del método se vea como una matriz pero permita que todos los que usan el método pasen tantos parámetros de ese tipo como quiera la persona que llama.

Estoy bastante seguro de que Java admite un comportamiento similar, pero no puedo averiguar cómo hacerlo.

Omar Kooheji
fuente

Respuestas:

194

En Java se llama varargs , y la sintaxis parece un parámetro regular, pero con puntos suspensivos ("...") después del tipo:

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

El parámetro vararg siempre debe ser el último parámetro en la firma del método y se accede como si recibiera una matriz de ese tipo (por ejemplo, Object[]en este caso).

David Grant
fuente
3
Gracias. Bizzarrly descubrí esto yo mismo mientras buscaba otra cosa, y venía aquí para responder la pregunta yo mismo.
Omar Kooheji
11

Esto hará el truco en Java

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

Tienes que sumar tres puntos ...y el varagrparámetro debe ser el último en la firma del método.

Stefano Driussi
fuente
3

Como está escrito en las respuestas anteriores, es varargsy se declara con ellipsis( ... )

Además, puede pasar los tipos de valor y / o tipos de referencia o ambos mixtos (Google Autoboxing ). Además, puede usar el parámetro de método como una matriz como se muestra con el printArgsAlternatemétodo a continuación.

Código de demostración

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

}

Salida

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
Levent Divilioglu
fuente