Numéro de variable Java ou arguments pour une méthode

148

Est-il possible de déclarer une méthode qui autorisera un nombre variable de paramètres?

Quel est le symbolisme utilisé dans la définition qui indique que la méthode doit autoriser un nombre variable de paramètres?

Réponse: varargs

user69514
la source
11
Depuis ses devoirs, nous ne voulons pas connaître votre question, nous voulons juste savoir que vous apprenez.
HDave

Réponses:

276

C'est correct. Vous pouvez en savoir plus à ce sujet dans le guide Oracle sur varargs .

Voici un exemple:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

qui peut être appelé comme

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.
BalusC
la source
1
Est-il possible de faire différents types de paramètres? par exemple (String ... strs, int ... ints). Qu'en est-il de n'importe quel type d'argument dans n'importe quel ordre?
trusktr
5
@trusktr: si vous voulez un objet, utilisez simplement Object....
BalusC
2
@trusktr Non, les primitives ne sont pas des objets. Il y a une bonne explication de la différence ici: programmerinterview.com/index.php/java-questions/...
Dick Lucas
5
@Richard: L'utilisation Object... argsfonctionnera avec les primitives en raison de la boîte automatique .
Sumit
1
@StevenVascellaro: Je suppose que les arguments sont traités comme un tableau, donc vous pourriez probablement le faire simplementvarargs.length
LMD
15
Variable number of arguments

Il est possible de passer un nombre variable d'arguments à une méthode. Cependant, il existe certaines restrictions:

  • Le nombre variable de paramètres doit tous être du même type
  • Ils sont traités comme un tableau dans la méthode
  • Ils doivent être le dernier paramètre de la méthode

Pour comprendre ces restrictions, considérez la méthode, dans l'extrait de code suivant, utilisée pour renvoyer le plus grand entier dans une liste d'entiers:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

source Oracle Certified Associate Java SE 7 Programmer Study Guide 2012

Abey Ella
la source
14

Oui c'est possible:

public void myMethod(int... numbers) { /* your code */ }
Dolph
la source
10

Pour différents types d'arguments, il y a 3 points :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

Alors appelle-le

foo("Hii"); 
foo("Hii", 146); 

pour la sécurité, utilisez comme ceci:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

Le principal inconvénient de cette approche est que si les paramètres facultatifs sont de types différents, vous perdez la vérification de type statique. Veuillez voir plus de variations .

T.Todua
la source
0

Oui Java autorise le vargsparamètre de méthode.

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Code_Eat_Sleep
la source