首页 文章

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

提问于
浏览
6

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

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

}

像这样称呼它 .

testA("hello") { lstr ->
    print(lstr)
}

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

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

3 回答

  • 2

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

    fun hello(name: String): Unit {
        println("Hello $name");
    }
    

    或者什么也不用

    fun hello(name: String) {
        println("Hello $name");
    }
    

  • 2

    Kotlin使用 Unit 表示没有返回的方法,而不是 Void . 它应该工作

    fun testA(str: String, listner: (lstr: String) -> Unit) {
    
    }
    
  • 2

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

    fun testA(str: String, listner: java.util.function.Function<String, Void?>) {
    ...
    }
    
    testA(("hello") { lstr ->
        print(lstr)
        null
    }
    

相关问题