Можно ли опубликовать список в качестве параметра для функции с неограниченными параметрами (...) в Java?
Допустим, у меня есть сторонняя библиотека, которая предоставляет функцию, принимающую неограниченные параметры:
void foo(Bar ... bar);
Я не могу изменить эту библиотеку или создать новые функции для этой библиотеки, я могу использовать только то, что они предоставляют. Далее у меня есть список параметров для использования:
List<Bar> bars = new ArrayList<Bar>();
// list initialization by some complex algorithm.
Я хочу иметь возможность использовать этот список в качестве параметра для foo
функция. Я знаю, что могу сделать что-то вроде этого:
for (Bar bar: bars)
foo(bar);
Но мне нужно минимизировать количество звонков на foo
насколько это возможно, поэтому я пытаюсь опубликовать целый список сразу. Это возможно с Java?
1 ответ
Так как это параметр переменного аргумента (или varargs), да; он взаимозаменяем с массивом. Вам просто нужно создать массив.
С помощью List#toArray(T[] arr)
это просто:
foo(bar.toArray(new Bar[bar.size()]));