Astuce Java #3 : ...

Derrière le nom bizarre de cet article se cache une vraie astuce en Java, concernant la déclaration des méthodes. Penchons nous sur le C. On retrouve en C une utilisation du ... similaire à celle que nous allons retrouver en Java. Regardons en particulier le prototype de la méthode printf :
int printf (__const char *__restrict __format, ...);

Si l'on analyse ce prototype, on peut constater que printf prends un premier argument, de type char*, appelé __format. Ensuite, nous retrouvons notre fameux ..., qui signifie littéralement : "Passez moi d'autres paramètres, autant que vous en voulez, je m'occuperais de les traiter". Notamment dans le cas de printf, ou nous allons lui passer une liste des valeurs à afficher sur la sortie standard.

Penchons nous maintenant sur l'équivalent de printf, mais en Java cette fois-ci. J'ai nommé la méthode PrintWriter.printf(String, Object...).

Le prototype de cette méthode ressemble à ça :
public PrintWriter printf(String format, Object... args);

De même qu'en C, nous avons une méthode qui prends un format à imprimer, et une liste d'arguments à remplacer dans le format. Un nombre non connu d'arguments, qui sont ici de type Object.

Maintenant, voyons comment nous allons pouvoir créer nos propres méthodes en utilisant ce fameux .... Nous allons essayer de créer une méthode qui prends un nombre inconnu de chaînes de caractères, et les affiche sur la sortie standard.

Première chose à faire, déclarer notre méthode :
public void printStrings(String... arguments) {

}

Dans la méthode ainsi déclarée, nous prenons un nombre inconnu de chaînes de caractères (String...), qui seront stockés dans la variable arguments. Maintenant, comment récupérer le contenu de arguments ? Quel est son type ? Demandons à Java de nous le dire ;)
public void printStrings(String... arguments) {
    System.out.println(arguments.getClass().getName());
}

L'exécution de ce morceau de code nous donne :
[Ljava.lang.String;

Nous avons donc une variable arguments de type String[]. Il ne nous reste donc plus qu'à itérer sur ce tableau :
public void printStrings(String... arguments) {
    for (String argument : arguments) {
        System.out.println(argument);
    }
}

Et voilà, nous n'avons plus qu'à appeler notre méthode :
printStrings("toto", "tata", "titi");

Ce qui nous produira la sortie suivante :
toto
tata
titi

Dernière remarque, le ... ne peut être utilisé que sur le dernier argument d'une méthode !

PS : Cette entrée était la douzième. Les intéressés se reconnaîtrons ;)

Permalink  |  Commentaires (0)


Comments:

Post a Comment:
  • HTML Syntax: Allowed