字符串模板中的可为空的var
Kotlin有一个称为字符串模板的功能。 在字符串中使用可空变量是否安全?
override fun onMessageReceived(messageEvent: MessageEvent?) { Log.v(TAG, "onMessageReceived: $messageEvent") }
如果messageEvent
为null
,上面的代码是否会抛出NullPointerException
?
你总是可以在try.kotlinlang.org上做一个小小的项目,亲自看看:
fun main(args: Array<String>) { test(null) } fun test(a: String?) { print("result: $a") }
此代码编译罚款和打印null
。 为什么会发生? 我们可以查看关于扩展函数的文档,它说toString()
方法(将在您的messageEvent
参数messageEvent
用以使String
不在其中)被声明为如下所示:
fun Any?.toString(): String { if (this == null) return "null" // after the null check, 'this' is autocast to a non-null type, so the toString() below // resolves to the member function of the Any class return toString() }
所以,基本上,它首先检查它的参数是否为null
,如果不是,则调用此对象的成员函数。