带有字符串和侦听器(类似于swift中的闭包)参数的kotlin方法 .
fun testA(str: String, listner: (lstr: String) -> Void) { }
像这样称呼它 .
testA("hello") { lstr -> print(lstr) }
错误:类型不匹配推断类型为单位但预期为Void
什么是单位?闭包的返回类型是 Void . 阅读很多其他问题,但可以通过这个简单的方法找到这里发生的事情 .
Void
根据 Kotlin documentation 单元类型对应于Java中的void类型 . 所以在Kotlin中没有返回值的正确函数是
fun hello(name: String): Unit { println("Hello $name"); }
或者什么也不用
fun hello(name: String) { println("Hello $name"); }
该
Kotlin使用 Unit 表示没有返回的方法,而不是 Void . 它应该工作
Unit
fun testA(str: String, listner: (lstr: String) -> Unit) { }
如果你确实需要 Void (它很少有用,但可能与Java代码互操作时),你需要返回 null ,因为 Void 被定义为没有实例(与Scala / Kotlin Unit 相反,只有一个):
null
fun testA(str: String, listner: java.util.function.Function<String, Void?>) { ... } testA(("hello") { lstr -> print(lstr) null }
3 回答
根据 Kotlin documentation 单元类型对应于Java中的void类型 . 所以在Kotlin中没有返回值的正确函数是
或者什么也不用
该
Kotlin使用
Unit
表示没有返回的方法,而不是Void
. 它应该工作如果你确实需要
Void
(它很少有用,但可能与Java代码互操作时),你需要返回null
,因为Void
被定义为没有实例(与Scala / KotlinUnit
相反,只有一个):