我有这个函数(理论上)接受一个函数数组作为参数。
fun execute(afterDay: Long, listeners: Array<(List<String>) -> Unit>)
在客户端类中,我试图调用此execute方法并将函数作为参数传递:
fun updateMovies(ids: Array<String>){
}
fun getNewIds() {
GetImdbIds(kodein).execute(daysBack.toEpochDay(), [::updateMovies])
}
但是它不能编译。
我做错了什么?
错误:
Error:(29, 59) Kotlin: Type inference failed. Expected type mismatch: inferred type is Array<KFunction1<@ParameterName Array<String>, Unit>> but Array<(List<String>) -> Unit> was expected
Error:(29, 59) Kotlin: Unsupported [Collection literals outside of annotations]
答案 0 :(得分:3)
我通过进行两项更改使它起作用。
首先,当您的updateMovies
想要使用Array<String>
的函数时,您编写的listeners
函数将使用List<String>
。因此,我们可以进行更改:
fun updateMovies(ids: List<String>) {
TODO()
}
接下来,如果您使用arrayOf()
创建函数引用数组,而不是尝试使用非法数组文字,则应编译:
GetImdbIds(kodein).execute(1L, arrayOf(::updateMovies))