字符串模板中的可为空的var

Kotlin有一个称为字符串模板的功能。 在字符串中使用可空变量是否安全?

override fun onMessageReceived(messageEvent: MessageEvent?) { Log.v(TAG, "onMessageReceived: $messageEvent") } 

如果messageEventnull ,上面的代码是否会抛出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 ,如果不是,则调用此对象的成员函数。