2012-08-31 26 views
42

Tengo un List<Thing> y me gustaría pasarlo a un método declarado doIt(final Thing... things). ¿Hay una manera de hacer eso?Pasando una lista en como varargs

El código es algo así:

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

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

doIt(things); 

Ese código, obviamente, no funciona porque no doIt() toma ThingList<Thing>.

¿Hay alguna manera de pasar en una lista como varargs?

Esto es en una aplicación para Android, pero no veo por qué la solución no se aplicará a cualquier cosa Java

Respuesta

77

Sólo tiene que pasar things.toArray(new Thing[things.size()]).

+7

Debe ser 'things.toArray (new Thing [things.size()]);'. – Gray

+2

Eso lo hará. (Y sí, @Gray tiene razón, es un poco más eficiente pasar la matriz del tamaño apropiado.) – xbakesx

+0

@Gray: ambos son correctos – newacct

1

El argumento variadico se interpreta internamente como una matriz. Entonces debes convertirlo en una matriz antes de las manos. También en su método doIt, debe acceder a elementos de cosas-s con indexación de matriz.

+0

Gracias por la respuesta rápida. Eso funciona genial ¿Hay alguna razón por la que mencionó el acceso a los elementos por índice de matriz, o es más que * puede * hacer eso? No hay razón para no hacerlo para (Cosa t: cosas) dentro de doIt(), ¿verdad? – xbakesx

+0

No puedo marcar correctamente la respuesta y la respuesta de SLaks, por lo que creo que debería editar su respuesta y agregar la razón por la que funciona. Entonces haré esa la respuesta correcta. Lo sentimos, a las personas les gusta ver el código en la respuesta. – xbakesx

+0

@xbakesx No hay ninguna razón para no poder usar cada uno. – Brian

Cuestiones relacionadas