2010-02-25 11 views
93

È possibile dichiarare un metodo che consentirà un numero variabile di parametri?Numero variabile di Java o argomenti per un metodo

Qual è il simbolismo utilizzato nella definizione che indica che il metodo dovrebbe consentire un numero variabile di parametri?

Risposta: varargs

+7

Dal momento che i compiti a casa, non vogliamo conoscere la tua domanda, vogliamo solo sapere che stai imparando. – HDave

risposta

205

Questo è corretto. È possibile trovare ulteriori informazioni su di esso in the Oracle guide on varargs.

Ecco un esempio:

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

che può essere chiamato come

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

È possibile eseguire vari tipi di parametri? per esempio. (String ... strs, int ... ints). Che ne pensi di qualsiasi tipo di argomento in qualsiasi ordine? – trusktr

+4

@trusktr: se vuoi un oggetto, usa solo 'Oggetto ...'. – BalusC

+1

Funziona anche con le primitive? – trusktr

11

Sì, è possibile:

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

È possibile passare un numero variabile di argomenti a un metodo. Tuttavia, ci sono alcune limitazioni:

  • Il numero variabile di parametri devono essere tutti dello stesso tipo
  • vengono trattati come un array all'interno del metodo
  • devono essere l'ultimo parametro del metodo

per comprendere queste restrizioni, considerare il metodo, nel seguente frammento di codice, utilizzata per restituire il più grande intero in una lista di interi:

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

fonte Oracle Certified Associate Java SE 7 programmatore Study Guide 2012

2

Se è possibile utilizzare diversi tipi di argomenti, quindi utilizzare:

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); 

per la sicurezza, utilizzare in questo modo:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

Lo svantaggio principale di questo approccio è che se i parametri opzionali sono di tipi diversi si perde il controllo di tipo statico. Per favore, vedi more variations.

0

Sì Java consente vargs nel parametro method.

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

Si prega di non utilizzare i collegamenti per fornire una risposta. I collegamenti possono morire ma se includi la risposta effettiva nel tuo post sarà ricercabile per le generazioni future, nel caso qualcuno abbia lo stesso problema. – Moseleyi

Problemi correlati