Numero di variabile Java o argomenti per un metodo


148

È possibile dichiarare un metodo che consentirà un numero variabile di parametri?

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

Risposta: varargs


11
Fin dai suoi compiti, non vogliamo conoscere la tua domanda, vogliamo solo sapere che stai imparando.
HDave il

Risposte:


276

È corretto. Puoi trovare ulteriori informazioni al riguardo nella guida Oracle su 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? ad es. (String ... strs, int ... ints). Che dire di qualsiasi tipo di argomento in qualsiasi ordine?
Trusktr

5
@trusktr: se vuoi un oggetto, usa semplicemente Object....
BalusC

2
@trusktr No, le primitive non sono oggetti. C'è una grande spiegazione della differenza qui: programmerinterview.com/index.php/java-questions/…
Dick Lucas

5
@Richard: l'utilizzo Object... argsfunzionerà con le primitive a causa del box automatico .
Vertice

1
@StevenVascellaro: suppongo che gli argomenti siano gestiti come un array, quindi probabilmente potresti semplicemente farlovarargs.length
LMD

15
Variable number of arguments

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

  • Il numero variabile di parametri deve essere dello stesso tipo
  • Sono 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, utilizzato per restituire il numero intero più grande in un elenco di numeri interi:

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

fonte Guida allo studio del programmatore Oracle SE 7 associato Oracle Certified Associate 2012


14

Si è possibile:

public void myMethod(int... numbers) { /* your code */ }

10

Per diversi tipi di argomenti, sono presenti 3 punti :

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

Quindi chiamalo

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

per 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 la verifica del tipo statico. Per favore, vedi più varianti .



0

Sì Java consente il vargsparametro del metodo.

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.