2015-08-26 15 views
8

Staram się przekazać listę ciągów znaków do metody wymagającej parametru "String ...".Przekazywanie listy <String> do String ... parametr

Czy ktoś może mi pomóc?

// How to put names into dummyMethod? 
List<String> names = getNames(); 

public void dummyMethod(String... parameter) { 
    mInnerList.addAll(Arrays.asList(parameter)); 
} 

Odpowiedz

10

Musisz przekonwertować List<String> do tablicy ciągów w celu wykorzystania go w Parametr "varargs" z dummyMethod. Możesz użyć parametru toArray z dodatkową tablicą jako parametrem. W przeciwnym razie, metoda zwraca Object[] i nie będzie skompilować:

List<String> names = getNames(); 
dummyMethod(names.toArray(new String[names.size()])); 
2

Tablica Przełęcz Ciąg (String[]) wewnątrz metody. Konieczna będzie konwersja listy do tablicy, a następnie przekazanie jej.

if (names != null) { 
    dummyMethod(names.toArray(new String[names.size()])); 
} 
+0

'toArray()' zwróci 'Zadanie [] '- to się nie skompiluje. – Glorfindel

+0

Moja zła, zaktualizowałem swoją odpowiedź. –

0

Jest to parametr vararg i do tego należy przekazać tablicę. ArrayList nie będzie działać. Możesz raczej przekonwertować tę listę na tablicę przed przejściem do metody.

String a = new String[names.size]; 
list.toArray(a) 
4

można wykonać następujące czynności:

dummyMethod(names.toArray(new String[names.size()]) 

to przekonwertuje listę tablicy

+0

'ToArray()' zwróci 'Object []' - nie skompiluje się. – Glorfindel

1

Ponieważ później analizować parametr jako listy, proponuję zmianę metody:

public void dummyMethod(List<String> parameter) { 
    mInnerList.addAll(parameter); 
} 

aby uniknąć dodatkowych kosztów .

Jednakże, jeśli chcesz korzystać z tej metody, „jak to jest”, to należy nazwać tak:

dummyMethod(names.toArray(new String[names.size()])); 

jak sugeruje Glorfindel w his answer, ponieważ trzy kropki oznaczają, że można zadzwonić metoda używająca wielu ciągów lub tablica ciągów znaków (więcej szczegółów: patrz: this post).

+1

'toArray()' zwróci 'Object []' - to się nie skompiluje. – Glorfindel

+0

Dzięki. toArray() (i dodatkowe odlewanie) zrobiły to! Metoda z parametrem "String ..." jest częścią biblioteki, więc próbowałem uniknąć jej zmiany. Ale to byłaby moja kolejna próba rozwiązania tego problemu. – RuNaWaY87

+0

@Glorfindel Aktualizowałem swoją odpowiedź, gdy skomentowałeś, po zobaczeniu odpowiedzi. – vefthym

1

VAR Arg faktycznie przyjmie macierz można stosować jak:

dummyMethod(names.toArray(new String[names.size()])); 

Oto kod próbki:

List<String> names = new ArrayList<>(); 
names.add("A"); 
names.add("B"); 
dummyMethod(names.toArray(new String[names.size()])); 
Powiązane problemy