web-dev-qa-db-fra.com

Java avec des arguments illimités

Le framework Spring utilise des méthodes où vous pouvez passer autant d'arguments que vous le souhaitez.

Je voudrais écrire une fonction qui peut également prendre une quantité illimitée de données. Comment s'appelle cette fonctionnalité pour que je puisse en savoir plus. Ou comment puis-je le définir?

Merci beaucoup.

48
Franz Kafka

Cela s'appelle varargs .

Il permet à une méthode de prendre n'importe quel nombre d'arguments. Ils sont accessibles sous forme de tableau dans la méthode:

public void foo(String... args) {
    for (String arg : args) {
      // do smth with arg.
     }
}

C'est sucre syntaxique . Le compilateur masque la création du tableau, donc au lieu de

 bar.foo(new String[] {"1", "2", "3"});

vous écrivez

 bar.foo("1", "2", "3");
126
Bozho

Pour ajouter la réponse de Bozho, vous pouvez également avoir d'autres arguments dans votre méthode avant varargs:

// foo(13, "foo", "bar", "baz");
// will print:
// 13 - |foo||bar||baz|
public void foo(int a, String... b) {
    System.out.println(a + " - ");

    for (String c : b) {
        System.out.print("|" + c + "|");
    }
}

Cependant, vous ne pouvez pas avoir d'arguments d'un type différent après. Ceux-ci ne fonctionnent pas:

public void bar(String... b, int b);
public void foo(int a, String... b, int b);
10
nicovank