类型不匹配推断类型是单位但预期为Void

Bil*_*lal 6 kotlin

带有字符串和侦听器(类似于swift中的闭包)参数的kotlin方法.

fun testA(str: String, listner: (lstr: String) -> Void) {

}
Run Code Online (Sandbox Code Playgroud)

像这样称呼它.

testA("hello") { lstr ->
    print(lstr)
}
Run Code Online (Sandbox Code Playgroud)

错误:类型不匹配推断类型为单位但预期为Void

什么是单位?闭包的返回类型是Void.阅读很多其他问题,但可以通过这个简单的方法找到这里发生的事情.

Ale*_*nov 6

如果您确实需要Void(它很少有用,但在与 Java 代码互操作时可能有用),您需要返回,null因为Void被定义为没有实例(与 Scala/Kotlin 相比Unit,它只有一个):

fun testA(str: String, listner: java.util.function.Function<String, Void?>) {
...
}

testA(("hello") { lstr ->
    print(lstr)
    null
}
Run Code Online (Sandbox Code Playgroud)


vis*_*gid 5

根据Kotlin 文档,单元类型对应于 Java 中的 void 类型。所以在 Kotlin 中没有返回值的正确函数是

fun hello(name: String): Unit {
    println("Hello $name")
}
Run Code Online (Sandbox Code Playgroud)

或者什么都不用

fun hello(name: String) {
    println("Hello $name")
}
Run Code Online (Sandbox Code Playgroud)