Zasadniczo mam ArrayList lokalizacji:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
poniżej nazywam następującą metodę:
.getMap();
parametry w metodzie getMap () to:
getMap(WorldLocation... locations)
Problem, który mam, polega na tym, że nie jestem pewien, jak przekazać CAŁĄ listę locations
do tej metody.
próbowałem
.getMap(locations.toArray())
ale getMap tego nie akceptuje, ponieważ nie akceptuje Objects [].
Teraz jeśli użyję
.getMap(locations.get(0));
będzie działał idealnie ... ale muszę jakoś przekazać WSZYSTKIE lokalizacje ... Oczywiście mógłbym nadal dodawać locations.get(1), locations.get(2)
itd., ale rozmiar tablicy jest różny. Po prostu nie jestem przyzwyczajony do całej koncepcjiArrayList
Jaki byłby najłatwiejszy sposób na to? Czuję, że po prostu nie myślę teraz.
java
variadic-functions
MJ93
źródło
źródło
Odpowiedzi:
Artykuł źródłowy: Przekazywanie listy jako argumentu do metody vararg
Skorzystaj z
toArray(T[] arr)
metody(
toArray(new WorldLocation[0])
działa również, ale bez powodu przydzielisz tablicę o zerowej długości).Oto kompletny przykład:
źródło
someMethod(someList.toArray(new ArrayList<Something>[someList.size()]))
ostrzeżenie, które jest bardzo irytujące, jeśli funkcja ma więcej niż kilka wierszy (ponieważ możesz albo ją wyłączyć dla całej funkcji, albo musisz utworzyć tablicę w dodatkowym kroku i wyłączyć ostrzeżenie dla zmiennej przechowujW Javie 8:
źródło
locations.toArray(WorldLocations[]::new)
wydaje się również działać od czasu wydania java 11 (bez.stream()
)Krótsza wersja zaakceptowanej odpowiedzi przy użyciu Guava:
można dodatkowo skrócić, importując statycznie do Array:
źródło
Możesz to zrobić:
lub
lub
@SuppressWarnings("unchecked")
jest potrzebny do usunięcia ostrzeżenia ide.źródło