«Paramètres» Java dans la signature de méthode?

112

En C #, si vous voulez qu'une méthode ait un nombre indéterminé de paramètres, vous pouvez faire du paramètre final dans la signature de méthode un params afin que le paramètre de méthode ressemble à un tableau mais permette à tout le monde utilisant la méthode de passer autant de paramètres de ce type comme le veut l'appelant.

Je suis assez sûr que Java prend en charge un comportement similaire, mais je ne sais pas comment le faire.

Omar Kooheji
la source

Réponses:

194

En Java, il s'appelle varargs , et la syntaxe ressemble à un paramètre normal, mais avec des points de suspension ("...") après le type:

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

Le paramètre vararg doit toujours être le dernier paramètre de la signature de la méthode et est accessible comme si vous receviez un tableau de ce type (par exemple Object[]dans ce cas).

David Grant
la source
3
Merci bizzarrly je l'ai découvert moi-même pendant que je cherchais autre chose et que je venais ici pour répondre moi-même à la question.
Omar Kooheji le
11

Cela fera l'affaire en Java

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

Vous devez ajouter trois points ...et le varagrparamètre doit être le dernier dans la signature de la méthode.

Stefano Driussi
la source
3

Comme il est écrit sur les réponses précédentes, il est varargset déclaré avec ellipsis( ... )

De plus, vous pouvez passer les types de valeur et / ou les types de référence ou les deux mixtes (google Autoboxing ). De plus, vous pouvez utiliser le paramètre de méthode en tant que tableau, comme indiqué avec la printArgsAlternateméthode ci-dessous.

Code démo

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

}

Production

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
Levent Divilioglu
la source