Способ работы аргумента vararg
состоит в том, чтобы собрать несколько значений в Array
и передать их в функцию. Следовательно, ваша функция concat
на самом деле является функцией, которая принимает Array<String>
в качестве единственного аргумента, и ссылка на нее имеет тип KFunction1<Array<out String>, String>
.
Итак, чтобы вызвать ее с вашей настройкой, то, что вы необходимо передать Array
, представляющий vararg
аргументы внутри List
, что делает этот Array
единственным аргументом, входящим в метод KCallable#call
после расширения списка:
val kf = KotlinFunction(::concat)
kf.call(listOf(arrayOf("a", "b", "c")))
class KotlinFunction(val function: KCallable<Any>) {
fun call(args: List<Any>) {
// Here, `call` will be invoked with one parameter, the Array,
// as that's the only element in the List
function.call(*args.toTypedArray())
}
}