В основном у меня есть ArrayList мест:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
ниже этого я называю следующий метод:
.getMap();
параметры в методе getMap ():
getMap(WorldLocation... locations)
У меня проблема в том, что я не уверен, как перейти из ВСЕГО списка locations
в этот метод.
я пробовал
.getMap(locations.toArray())
но getMap не принимает это, потому что не принимает Objects [].
Теперь, если я использую
.getMap(locations.get(0));
это будет работать отлично ... но мне нужно как-то передать ВСЕ места ... Я, конечно, мог бы продолжать добавлять locations.get(1), locations.get(2)
и т.д., но размер массива варьируется. Я просто не пользуюсь всей концепциейArrayList
Какой самый простой способ это сделать? Я чувствую, что сейчас не думаю прямо.
Ответы:
Исходная статья: Передача списка в качестве аргумента методу vararg
Используйте
toArray(T[] arr)
метод.(
toArray(new WorldLocation[0])
также работает, но вы бы выделяли массив нулевой длины без причины.)Вот полный пример:
источник
someMethod(someList.toArray(new ArrayList<Something>[someList.size()]))
, вы получите предупреждение, которое очень раздражает, если функция имеет длину более нескольких строк (потому что вы можете либо подавить ее для всей функции, либо вам нужно создать массив на дополнительном шаге и отключить предупреждение для переменной, которую вы сохраните егоВ Java 8:
источник
locations.toArray(WorldLocations[]::new)
также, кажется, работает, так как Java 11 (без.stream()
)Укороченная версия принятого ответа с использованием гуавы:
можно укоротить дальше, статически импортируя toArray:
источник
Ты можешь сделать:
или
или
@SuppressWarnings("unchecked")
необходимо для удаления предупреждения ide.источник