2012-03-15 13 views

risposta

5

E 'la sintassi per la scrittura degli elementi dell'array come parametro

per esempio:

public String first (String... values) { 
    return values[0]; 
} 

quindi è possibile chiamare questo metodo con first("4","2","5","67")

Il javacompiler creerà una matrice di parametri da solo.

+0

prima ("4", "2", "5", "67"), non prima (4,2,5,67) –

+0

true. Per una ragione stavo pensando ai numeri interi. –

13

varags. Se la firma di un metodo è method(Param param, String... x), sarà necessario un tipo di oggetto Param e qualsiasi numero di oggetti stringa.

Ci sono un paio, se le cose interessanti su di esso:

  1. Non è niente di speciale. È solo un array zuccherato. Quindi, method(MyObject... o) è uguale a method(MyObject[] o).

  2. Vararg deve essere l'ultimo parametro nell'elenco di argomenti.

  3. C'è questa cosa divertente che mi ha morso una volta. method(MyObject... o) può essere chiamato come method() senza alcun errore di compilazione. Java convertirà internamente la chiamata no-arg a method(new MyObject[0]). Quindi, sii consapevole di questo.

1

È un vararg, numero variabile di argomenti. Nel corpo del metodo lo tratti come una stringa [], ma quando chiami il metodo puoi scegliere di fornire una stringa [] o semplicemente enumerare i tuoi valori.

void foo(String... blah) { } 

void bar() { 
    String[] a = { "hello", "world" }; 
    foo(a); // call with String[] 
    foo("hello", "world"); // or simply enumerate items 
} 

è stato introdotto con Java 5.

0

String è un tipo stringa. String[] è una matrice di stringhe.

String ... è uno zucchero sintattico di nome ellissi, introdotto in java 1.5 e preso da C. Può essere utilizzato nelle definizioni dei metodi e in realtà lo stesso di matrice con una sola differenza. Se il metodo è definito come:

public void foo(String[] arg){}

si deve passare serie ad esso:

foo(new String[] {"a", "b"});

Se il metodo è definito come:

public void foo(String arg){}

È possibile chiamare o

foo(new String[] {"a", "b"});

o

foo("a", "b");