我有一个简单的功能检查,像这样:
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)给我一个错误,强调了大于('>')运算符:
此外,它还作为错误行controllerId?.startsWith(BLUETOOTH_NAME_PREFIX)下划线并说:
到底是什么问题?这只是一种简单的方法,可以与第一块if-else样式一起使用。
最佳答案
您不能在compareTo
上调用<
(使用controllerId?.length
运算符),因为它的类型是Int?
,这意味着它可能是null
,在这种情况下,不能将其与数字进行比较。
同样,controllerId?.startsWith(BLUETOOTH_NAME_PREFIX)
调用返回Boolean?
(如果null
是controllerId
,则它将返回null
),该调用不能传递给&&
运算符,只有真实的Boolean
可以传递。
此处的解决方案是执行您在原始方法中所做的null
检查,并依靠将您的controllerId
转换为String
的智能强制转换来摆脱安全调用:
fun parseValidBluetoothBrickedId(controllerId: String?): Boolean =
controllerId != null
&& controllerId.length > BLUETOOTH_NAME_PREFIX.length
&& controllerId.startsWith(BLUETOOTH_NAME_PREFIX)