#kotlin #variadic-functions #function-parameter
#kotlin #переменные-функции #функция-параметр
Вопрос:
Например, в классе Android DownloadManager есть функция, объявленная в Java как:
private long[] mIds = null;
public Query setFilterById(long... ids) {
mIds = ids;
return this;
}
В Java я могу передать ему массив длинных значений, и он отлично работает. В Kotlin, когда я пытаюсь:
val mEnqued = ArrayList<Long>()
// collect download ids to mEnqued...
query.setFilterById(mEnqued.toLongArray())
// or try to pass an array of long created in any other way...
// it will take: query.setFilterById(7L, 15L, 234L) - but it's useless
Компилятор Kotlin жалуется на «несоответствие типов: предполагаемый тип — LongArray, но ожидался Long»… Как еще я мог передать этой функции список или массив длинных значений идентификаторов? Я не могу ввести их непосредственно в исходный код, потому что заранее я понятия не имею, сколько их будет или каковы будут их значения? Kotlin кажется здесь очень ограниченным или «поврежденным мозгом»…
Комментарии:
1. Попробуйте оператор распространения
query.setFilterById(*mEnqued.toLongArray())
2. Спасибо, Майкл, это действительно помогает. Пожалуйста, опубликуйте это как фактический ответ, если вы не возражаете, другим тоже будет легче найти. Хорошая статья, которая объясняет эти вещи proandroiddev.com /…
Ответ №1:
У Kotlin есть оператор распространения для доставки массива в виде списка отдельных параметров в vararg
функцию:
query.setFilterById(*mEnqued.toLongArray())
Смотрите также документацию Kotlin