Преобразование массива Kotlin в varargs Java

Ответы:

234

Вы должны использовать оператор распространения, который выглядит следующим образом: *
Оператор распространения необходимо поместить перед аргументом массива:

antMatchers(*angularRoutings)

Для получения дополнительной информации см. Документацию :

Когда мы вызываем vararg-функцию, мы можем передавать аргументы один за другим, например asList(1, 2, 3), или, если у нас уже есть массив и мы хотим передать его содержимое функции, мы используем оператор распространения (префикс массива *):

Обратите внимание, что оператор распространения определен только для массивов и не может использоваться напрямую в списке. При работе со списком используйте, например, toTypedArray()для преобразования его в массив:

 *list.toTypedArray()
s1m0nw1
источник
А как конвертировать обратно?
lacas
@Iacas Что вы подразумеваете под "обратным преобразованием"? A varargожидает отдельные элементы, и *arrayэто способ Kotlin сказать «обрабатывать этот массив как отдельные элементы для этой цели». Внутри vararg-функции varargпараметр в любом случае будет массивом. Для преобразования отдельных элементов в массив вы можете использовать arrayOf(...), но в этом случае вам это не нужно.
Дарио Зайдл
3
Обратите внимание, что это приводит к очень высокому снижению производительности. sites.google.com/a/athaydes.com/renato-athaydes/posts/... проверки списков параметров, или medium.com/@BladeCoder/...
svkaka
Есть ли способ избежать использования оператора распространения и передать некоторый массив или список методу, который принимает vararg?
Wackaloon
@DarioSeidl Он имеет в виду: что, если у нас есть переменные строки, и мы хотим перейти к функции, которая ожидает массив строк?
разработчик Android