gpt4 book ai didi

android - Kotlin:功能类型不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:38 25 4
gpt4 key购买 nike

编译时出现以下错误:

类型不匹配:推断的类型是 (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 时,如果推断的返回类型不是 Unitthe 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com