1

我有这个函数(理论上)接受一个函数数组作为参数。

fun execute(afterDay: Long, listeners: Array<(List<String>) -> Unit>)

在客户端类中,我尝试调用此执行方法并将函数作为参数传递:

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]
4

1 回答 1

4

我通过进行两项更改来实现这一点。

首先,您updateMovies所写的函数需要一个Array<String>,而您listeners想要的函数需要一个List<String>。所以,我们可以做出这样的改变:

fun updateMovies(ids: List<String>) {
    TODO()
}

接下来,如果您使用arrayOf()而不是尝试非法数组文字来创建函数引用数组,则应该编译:

GetImdbIds(kodein).execute(1L, arrayOf(::updateMovies))
于 2019-01-25T00:54:25.267 回答