«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.

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).


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.


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 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.