在我的android项目中,我像这样覆盖了onCheckedChanged()
:
var numberOfPlayers: Int = 0
override fun onCheckedChanged(group: RadioGroup?, checked: Int) {
val chosen = activity?.findViewById<RadioButton>(checked)?.text
numberOfPlayers = chosen.toString().toInt()
}
我很困惑为什么numberOfPlayers
不会用红色下划线,因为chosen
可能是null
-因此,我在可能的{{1} }值。为什么这不会引起toString()
?
答案 0 :(得分:8)
.toString()
具有安全性,这意味着如果接收到null
值,它将返回“空”字符串。
为stated in the official documentation:
fun Any?.toString(): String
返回对象的字符串表示形式。可以用 空接收器,在这种情况下,它将返回字符串“ null”
答案 1 :(得分:1)
toString()
中的正常kotlin.Any
应该抛出异常。但是,还有Any?.toString()
中的方法kotlin.kotlin_builtins
。
由于kotlin.Any.toString
不能应用于可为null的类型,因此您的编译器知道应使用哪种方法。
请参见以下示例:
fun test() {
val possibleNull: Any? = Any()
val notNull: Any = Any()
possibleNull.toString()
possibleNull?.toString()
possibleNull!!.toString()
notNull.toString()
}
如果使用IntelliJ编写此代码,您会看到第一个toString()
实际上是扩展方法,因为该方法可以应用于该类型。其他所有示例都将调用“正常的” toString(),它会按照您的说明工作。