kotlin - Kotlin-将函数数组作为函数的参数传递

标签 kotlin

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

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]

最佳答案

我通过进行两项更改使它起作用。

首先,当updateMovies想要使用Array<String>的函数时,编写的listeners函数将使用List<String>。因此,我们可以进行以下更改:

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

接下来,如果您使用arrayOf()创建函数引用的数组,而不是尝试使用非法的数组文字,则应编译:
GetImdbIds(kodein).execute(1L, arrayOf(::updateMovies))

关于kotlin - Kotlin-将函数数组作为函数的参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357414/

相关文章:

android - 无法在 Anko 中调用 StartActivityForResult

Java 函数转换为 Kotlin 失败

dictionary - Kotlin:集合定义的差异

javascript - 在kotlin-js中包含js依赖项

android - Kotlin:每秒调用一个函数

kotlin - 为什么 println() 在一种情况下会抛出错误,而在另一种情况下却不会?

arrays - 数组<编号> : get and set Int values without casting

intellij-idea - 在Intellij中让EduTool在Kotlin上工作

android - Kotlin 1.6、Jetpack Compose 1.1.0 编译错误

android - 在Android中单击通知时如何打开应用程序?