变量重新分配没有无效的安全性吗?

时间:2019-04-11 12:17:14

标签: kotlin

在我的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()

2 个答案:

答案 0 :(得分:8)

.toString()具有安全性,这意味着如果接收到null值,它将返回“空”字符串。

stated in the official documentation

  

fun Any?.toString(): String

     

返回对象的字符串表示形式。可以用   空接收器,在这种情况下,它将返回字符串“ null”

答案 1 :(得分:1)

如果值为null,则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(),它会按照您的说明工作。

enter image description here