2012-03-15 26 views
6

Powiel możliwe:
varargs and the '…' argument
Java, 3 dots in parametersCo to jest "String ..." w języku Java?

Widziałem tę definicję w moim android pliku java. Wygląda podobnie jak String []. Czy oni są inni? Dziękuję.

+10

http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html – assylias

+0

i http: // stackoverflow. com/questions/1656901/varargs-and-the-argument – assylias

+0

... lub dowolny dobry podręcznik napisany w języku Java w ciągu ostatnich 5 lat. –

Odpowiedz

5

To składnia do zapisywania elementów tablicy jako parametr

na przykład:

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

Następnie można wywołać tę metodę z first("4","2","5","67")

javacompiler utworzy tablicę parametry same.

+0

najpierw ("4", "2", "5", "67"), nie pierwszy (4,2,5,67) –

+0

prawda. Z jednego powodu myślałem o liczbach całkowitych. –

13

varags. Jeśli podpis metody to method(Param param, String... x), pobierany będzie jeden obiekt typu Param i dowolna liczba obiektów typu String o wartości.

Istnieje kilka fajnych rzeczy, jeśli o tym:

  1. To nic specjalnego. To tylko tablica z cukrem. Tak więc method(MyObject... o) jest taki sam jak method(MyObject[] o).

  2. Vararg musi być ostatnim parametrem na liście argumentów.

  3. Jest taka śmieszna rzecz, która mnie ugryzła. method(MyObject... o) można nazwać jako method() bez błędu kompilacji. Java wewnętrznie skonwertuje wywołanie No-Arg na method(new MyObject[0]). Tak więc bądź tego świadomy.

1

Jest to zmienna, zmienna liczba argumentów. W ciele metody traktujesz go jak ciąg [], ale kiedy wywołujesz metodę, możesz albo wybrać ciąg [], albo po prostu wyliczyć wartości.

void foo(String... blah) { } 

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

został wprowadzony z Java 5.

0

String jest typu ciąg. String[] to tablica łańcuchów.

to cukier składniowy o nazwie ellipsis, wprowadzony w Javie 1.5 i zaczerpnięty z C. Może być używany w definicjach metod i faktycznie taki sam jak tablica z jedną różnicą. Jeśli metoda jest zdefiniowana jako:

public void foo(String[] arg){}

należy przekazać tablicę do niego:

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

Jeśli metoda jest zdefiniowana jako:

public void foo(String arg){}

Można zadzwonić to albo

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

lub

foo("a", "b");