web-dev-qa-db-fra.com

Java "params" dans la signature de la méthode?

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 la méthode un params pour que le paramètre de la méthode ressemble à un tableau mais permette à tous ceux qui utilisent la méthode de passer autant de paramètres de ce type que l'appelant le souhaite.

Je suis assez sûr Java supporte un comportement similaire, mais je ne peux pas savoir comment le faire.

106
Omar Kooheji

Dans Java cela 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 dans la signature de la méthode, et est accessible comme si vous aviez reçu un tableau de ce type (par exemple Object[] dans ce cas).

187
David Grant

Cela fera l'affaire en Java

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

Vous devez ajouter trois points ... et le paramètre varagr doivent être les derniers dans la signature de la méthode.

11
Stefano Driussi

Comme il est écrit sur les réponses précédentes, il est varargs et déclaré avec Ellipsis (...)

De plus, vous pouvez transmettre les types de valeur et/ou les types de référence ou les deux mélangés (google Autoboxing). De plus, vous pouvez utiliser le paramètre de méthode comme un tableau comme indiqué avec la méthode printArgsAlternate ci-dessous.

Code de démonstration

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

}

Sortie

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