Básicamente tengo una ArrayList de ubicaciones:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
debajo de esto llamo el siguiente método:
.getMap();
Los parámetros en el método getMap () son:
getMap(WorldLocation... locations)
El problema que tengo es que no estoy seguro de cómo pasar toda la lista de locations
ese método.
He intentado
.getMap(locations.toArray())
pero getMap no acepta eso porque no acepta objetos [].
Ahora si uso
.getMap(locations.get(0));
funcionará perfectamente ... pero de alguna manera necesito pasar TODAS las ubicaciones ... Por supuesto, podría seguir agregando, locations.get(1), locations.get(2)
etc., pero el tamaño de la matriz varía. Simplemente no estoy acostumbrado a todo el concepto de unArrayList
¿Cuál sería la forma más fácil de hacer esto? Siento que no estoy pensando bien en este momento.
java
variadic-functions
MJ93
fuente
fuente
Respuestas:
Artículo de origen: pasar una lista como argumento a un método vararg
Usa el
toArray(T[] arr)
método.(
toArray(new WorldLocation[0])
también funciona, pero asignaría una matriz de longitud cero sin ningún motivo).Aquí hay un ejemplo completo:
fuente
someMethod(someList.toArray(new ArrayList<Something>[someList.size()]))
le dará una advertencia que es muy molesta si la función tiene más de unas pocas líneas (porque puede suprimirla para toda la función o debe crear la matriz en un paso adicional y suprimir la advertencia en la variable que almacenarlo.En Java 8:
fuente
locations.toArray(WorldLocations[]::new)
también parece funcionar desde java 11 (Sin el.stream()
)Una versión más corta de la respuesta aceptada usando Guava:
se puede acortar aún más importando estáticamente a la matriz:
fuente
Tu puedes hacer:
o
o
@SuppressWarnings("unchecked")
es necesario para eliminar la advertencia ide.fuente