一、如何调用?
在对象后面使用"?"符号。
当一个对象添加了"?"符号,只会在这个对象存在的时候被调用,否则将会忽略它,安全运行程序。
举例:
val context : Context? = null
val res = context?.getResources() // 不会崩溃,但是 res 将为空.
二、调戏
我们知道上面的代码不会使程序崩溃,那么我们可以这样调戏Kotlin,我们继续使用可以为空的对象,代码最终会是这样:
val context : Context? = null
val res = context?.getResources() // 不会崩,但为空
val appName = res?.getString(R.string.app_name) // 不会崩,但为空
val shortName = appName?.substring(0, 2) // 不会崩,但为空
我们发现,这样下去是很可怕的,因为我们在实际项目中,是不会让对象为空的。那么我们如何判断非空的呢?如果只是检测context 不为空,可以省略掉"?"符号:
//第一种 java方式
val context : Context? = null
if (context != null) {
val res = context.getResources() // 不需要 '?'
val appName = res.getString(R.string.app_name)
val shortName = appName.substring(0, 2)
}
//第二种 kotlin方式
val context : Context? = null
context?.let {
val res = context.getResources() // 不需要'?'
val appName = res.getString(R.string.app_name)
val shortName = appName.substring(0, 2)
}
三、总结
使用kotlin的非空判断方式可以灵活的替换掉Java的非空判断,省略掉"?"符号。