gpt4 book ai didi

Kotlin:无法使用 "return body"函数样式一次应用两个条件

转载 作者:行者123 更新时间:2023-12-04 22:41:06 26 4
gpt4 key购买 nike

我有一个简单的功能检查,像这样:

    fun parseValidBluetoothBrickedId(controllerId: String?): Boolean{
if(controllerId != null){
if(controllerId.startsWith(BLUETOOTH_NAME_PREFIX) && controllerId.length > BLUETOOTH_NAME_PREFIX.length)
return true
}

return false
}

我想将其转换为更简单的样式:
   fun parseValidBluetoothBrickedId(controllerId: String?) =
controllerId?.length > BLUETOOTH_NAME_PREFIX.length
&& controllerId?.startsWith(BLUETOOTH_NAME_PREFIX)

但是IDE(Android Studio 3.0 Beta7)给我一个错误,强调了大于('>')运算符:

Operator calls corresponds to a dot-qualified call 'controllerId?.length.compareTo(BLUETOOTH_NAME_PREFIX.length) which is not allowed here



它也作为错误行controllerId?.startsWith(BLUETOOTH_NAME_PREFIX)下划线并说:

Type mismatch. Required: Boolean, Found Boolean?



到底是什么问题?这只是一种简单的方法,可以与第一个块if-else样式一起使用。

最佳答案

您不能在compareTo上调用<(使用controllerId?.length运算符),因为它的类型是Int?,这意味着它可能是null,在这种情况下,不能将其与数字进行比较。

同样,controllerId?.startsWith(BLUETOOTH_NAME_PREFIX)调用返回Boolean?(如果nullcontrollerId,则它将返回null),该值无法传递给&&运算符,只有真实的Boolean可以传递。

这里的解决方案是执行您在原始方法中所做的null检查,并依靠将您的controllerId转换为String的智能强制转换来摆脱安全调用:

fun parseValidBluetoothBrickedId(controllerId: String?): Boolean =
controllerId != null
&& controllerId.length > BLUETOOTH_NAME_PREFIX.length
&& controllerId.startsWith(BLUETOOTH_NAME_PREFIX)

关于Kotlin:无法使用 "return body"函数样式一次应用两个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46642191/

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