Kotlin:功能类型不匹配

Rah*_*hul 3 android kotlin

编译时出现以下错误:

类型不匹配:推断的类型是 (String, Boolean) -> Any but ((String, Boolean) -> Unit)?预料之中

我的类型声明是

private val ConsisFilter_Click = { filterText: String, isStrictSearch: Boolean ->

    try {
        //My Codes
    }
    catch (e: Exception) {
        try {
            alert{}.show()
        }catch (ignored: Exception) {}
    }
}



var ConsisFilterClickEvent:((filterText: String, isStrictSearch: Boolean) -> Unit)? = null 
Run Code Online (Sandbox Code Playgroud)

像这样分配

inputDialog!!.ConsisFilterClickEvent = ConsisFilter_Click
Run Code Online (Sandbox Code Playgroud)

我在其他地方遵循相同的模式,但没有收到任何错误。只有这件特定的作品有问题。难道我做错了什么。请帮我。

注意:如果我将ConsisFilter_Click(try catch 块的代码)的所有代码放入一个单独的函数中,然后简单地ConsisFilter_Click从那时起调用该函数,那么这一切都很好

谢谢

zsm*_*b13 5

在 Kotlin 中使用 lambda 时,如果推断的返回类型不是Unit则返回其中的最后一个表达式。在您的情况下,这是 try-catch 语句,它也可用作Kotlin 中的表达式

如果要强制 lambda 的返回类型为Unit,则可以按照其他答案中的说明明确写下其类型,也可以直接将其分配给ConsisFilterClickEvent而不是先将其存储在另一个变量中 - 在这两种情况下,编译器会发现您不想返回最后一个表达式,而只想使用 try-catch 作为语句。

您可以做的另一件事是Unit在 lambda 的末尾显式返回对象:

private val ConsisFilter_Click = { filterText: String, isStrictSearch: Boolean ->
    try {
        ...
    }
    catch (e: Exception) {
        ...
    }
    Unit
}
Run Code Online (Sandbox Code Playgroud)