编译时出现以下错误:
类型不匹配:推断的类型是 (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
从那时起调用该函数,那么这一切都很好
谢谢
在 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)
归档时间: |
|
查看次数: |
4466 次 |
最近记录: |