编译时出现以下错误:
类型不匹配:推断的类型是 (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
像这样分配
inputDialog!!.ConsisFilterClickEvent = ConsisFilter_Click
我在其他地方遵循相同的模式,但没有收到任何错误。只有这个特别的部分是有问题的。难道我做错了什么。请帮助我。
注意:如果我将 ConsisFilter_Click
的所有代码(try catch block 的代码)放入一个单独的函数中,然后简单地从 ConsisFilter_Click
中调用该函数> 那么这一切都很好
谢谢
最佳答案
在 Kotlin 中使用 lambda 时,如果推断的返回类型不是 Unit
,the last expression in it is returned .在你的例子中,这是 try-catch 语句,它也有效 as an expression在 Kotlin 中。
如果你想强制你的 lambda 的返回类型为 Unit
,你可以按照其他答案中的说明明确地写下它的类型,或者你可以直接将它分配给 ConsisFilterClickEvent
而不是首先将它存储在另一个变量中 - 在这两种情况下,编译器会发现您不想返回最后一个表达式,而只想使用 try-catch 作为语句。
您可以做的另一件事是在 lambda 的末尾显式返回 Unit
对象:
private val ConsisFilter_Click = { filterText: String, isStrictSearch: Boolean ->
try {
...
}
catch (e: Exception) {
...
}
Unit
}
关于android - Kotlin:功能类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44743511/