这个科特林代码:
fun badKotlin(text: String?): Boolean {
if (text == null) {
return true
}
var temp = text
if (false) {
temp = Arrays.deepToString(arrayOf(text))
}
return temp.isBlank() // <-- only safe (?.) or non null asserted (!!.) calls
}
不编译消息:only safe (?.) or non null asserted (!!.) calls are allowed on a nullable receiver of type String?
但如果我添加else
:
fun badKotlin(text: String?): Boolean {
if (text == null) {
return true
}
var temp = text
if (false) {
temp = Arrays.deepToString(arrayOf(text))
} else {
temp = Arrays.deepToString(arrayOf(text))
}
return temp.isBlank()
}
全部编译。那么,为什么类型推断会失败呢?
如果我将临时类型更改var temp: String = text
为成功编译!因此,此外,如果我们像这样更改 temp 的分配:temp = String.format("%s", text)
它也会被编译。
更新:
编译成功:
fun badKotlin(text: String?): Boolean {
if (text == null) {
return true
}
var temp = text
if (false) {
temp = String.format("%s", text)
}
return temp.isBlank() // <-- only safe (?.) or non null asserted (!!.) calls
}
和这个:
fun badKotlin(text: String?): Boolean {
if (text == null) {
return true
}
var temp: String = text
if (false) {
temp = Arrays.deepToString(arrayOf(text))
}
return temp.isBlank() // <-- only safe (?.) or non null asserted (!!.) calls
}