2010-02-25 13 views
93

Il est possible de déclarer une méthode qui permettra un nombre variable de paramètres?Java variable nombre ou arguments pour une méthode

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

Réponse: varargs

+7

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

Répondre

205

C'est exact. Vous pouvez trouver plus à ce sujet dans the Oracle guide on 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. 
+1

Est-il possible de faire différents types de paramtres? par exemple. (String ... strs, int ... ints). Qu'en est-il de n'importe quel type d'argument dans n'importe quel ordre? – trusktr

+4

@trusktr: si vous voulez un objet, utilisez 'Object ...'. – BalusC

+1

Est-ce que cela fonctionne aussi avec les primitives? – trusktr

11

Oui, il est possible:

public void myMethod(int...numbers) { ... } 
10
Variable number of arguments 

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

  • Le nombre variable de paramètres doivent 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èrent la méthode, dans l'extrait de code suivant, utilisé pour retourner 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 Guide d'étude programmeur 2012

2

Si vous pouvez utiliser différents types d'arguments, alors utilisez:

public void foo(Object... x) { 
    String first = x.length > 0 ? (String)x[0] : "Hello"; 
    int duration = x.length > 1 ? Integer.parseInt((String) x[1])  : 888; 
} 
foo("Hii",); 
foo("Hii", 146); 

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

L'inconvénient principal de cette approche est que si les paramètres optionnels sont de types différents, vous perdez la vérification de type statique. Veuillez vous reporter au more variations.

0

Oui Java autorise vargs dans le paramètre de méthode.

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

S'il vous plaît ne pas utiliser les liens pour fournir une réponse. Les liens peuvent mourir, mais si vous incluez la réponse dans votre message, elle sera consultable pour les générations futures, au cas où quelqu'un aurait le même problème. – Moseleyi