2012-08-31 26 views
42

Mam List<Thing> i chciałbym przekazać go do metody zadeklarowanej jako doIt(final Thing... things). Czy jest jakiś sposób na zrobienie tego?Przekazywanie listy jako varargs

Kod wygląda coś takiego:

public doIt(final Thing... things) 
{ 
    // things get done here 
} 

List<Thing> things = /* initialized with all my things */; 

doIt(things); 

Ten kod oczywiście nie działa, ponieważ doIt() trwa Thing nie List<Thing>.

Czy istnieje sposób przekazania na listę jako varargs?

To jest w App Android, ale nie widzę dlaczego rozwiązanie nie będzie stosować się do niczego Java

Odpowiedz

77

Wystarczy przejść things.toArray(new Thing[things.size()]).

+7

Powinno to być 'things.toArray (new Thing [things.size()]);'. – Gray

+2

To wystarczy. (Tak, tak @Gray ma rację, trochę wydajniej jest przekazać tablicę o odpowiednim rozmiarze). – xbakesx

+0

@Gray: oba mają rację – newacct

1

Argument variadic jest wewnętrznie interpretowany jako tablica. Więc powinieneś przekonwertować go do tablicy przedtem. Również w twojej metodzie doIt powinieneś uzyskać dostęp do elementów rzeczy z indeksowaniem tablicy.

+0

Dzięki za szybką odpowiedź. To działa świetnie. Czy jest jakiś powód, dla którego wspomniałeś o dostępie do elementów według indeksu tablicowego, czy raczej możesz to * zrobić *? Nie ma powodu, dla którego nie warto robić (rzeczy, rzeczy) wewnątrz doIt(), prawda? – xbakesx

+0

Nie mogę zaznaczyć zarówno odpowiedzi na twoje pytanie, jak i odpowiedzi SLaks, więc myślę, że powinieneś edytować swoją odpowiedź i dodać powód, który działa. Wtedy zrobię poprawną odpowiedź. Przepraszamy, ludzie lubią widzieć kod w odpowiedzi. – xbakesx

+0

@xbakesx Nie ma powodu, dla którego nie można użyć dla każdego. – Brian