ProgrammationDéveloppeur Java Backend

Qu'est-ce que les varargs (arguments de longueur variable) en Java, comment fonctionne leur implémentation interne et quelles subtilités et limitations existent lors de leur utilisation ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

Varargs — une syntaxe spéciale permettant à une méthode de recevoir un nombre variable (n'importe quel) d'arguments d'un même type. Dans la déclaration de la méthode, ce paramètre est désigné par Type... name (par exemple, int... nums). À l'intérieur de la méthode, les arguments sont perçus comme un tableau ordinaire.

Exemple :

public void printNumbers(int... nums) { for (int n : nums) { System.out.print(n + " "); } }

On peut l'appeler ainsi :

printNumbers(1, 2, 3, 4); // ou printNumbers();

Implémentation interne : lors de l'appel d'une méthode avec varargs, le compilateur crée automatiquement un tableau du type approprié.

Limitations et subtilités :

  • Un paramètre varargs ne peut être qu'un seul et doit toujours être le dernier dans la liste des paramètres.
  • L'extension varargs (Type...) est essentiellement un tableau (Type[]).
  • Passer null : printNumbers(null) entraînera un NPE lors de la tentative de passage en boucle.
  • La surcharge des méthodes avec varargs peut entraîner des ambiguïtés dans les appels.

Question piège

Question : "Peut-on déclarer une méthode avec plusieurs paramètres varargs ?"

Erreur fréquente : beaucoup pensent qu'on peut déclarer public void example(int... a, String... b), mais cela provoquera une erreur de compilation.

Réponse correcte : Non, il ne peut y avoir qu'un seul paramètre varargs, et il doit être le dernier.

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet


Histoire

Dans une bibliothèque de journalisation d'entreprise, des versions surchargées des méthodes avec varargs et tableaux ont été réalisées. Lors du passage d'un tableau au lieu d'un ensemble d'éléments, le mauvais variant de la méthode a été appliqué, ce qui a entraîné l'enregistrement du tableau en tant qu'objet, et non de son contenu. Cela a causé de la confusion lors de l'analyse des journaux.


Histoire

Dans un service d'intégration, l'appel d'une méthode avec varargs acceptait null, sans vérifier le NPE. Le système tombait de manière inattendue lors de la tentative de boucle des éléments, car un tableau vide était attendu au minimum.


Histoire

Dans un projet de e-commerce, il y avait de la confusion dans les surcharges de méthodes : une méthode send(String subject, String... emails) et une autre send(String subject, String[] emails). Lors du passage d'un tableau, le compilateur choisissait implicitement la mauvaise méthode. Résultat : les courriers n'étaient pas envoyés aux clients.