È 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
È 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
Risposte:
È 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.
Object...
.
Object... args
funzionerà con le primitive a causa del box automatico .
varargs.length
Variable number of arguments
È possibile passare un numero variabile di argomenti a un metodo. Tuttavia, ci sono alcune restrizioni:
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
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 .
Sì ... da Java 5: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
Sì Java consente il vargs
parametro del metodo.
public class Varargs
{
public int add(int... numbers)
{
int result = 1;
for(int number: numbers)
{
result= result+number;
} return result;
}
}