1. 安全运算符 ?. 与Elvis运算符 ?: 配合使用
nimAccount = teacher?.nim()?.accid() ?: "jake"
nimToken = teacher?.nim()?.token() ?: "test"
上述代码 等价于 如下代码 :
if (teacher != null && teacher.nim() != null && teacher.nim()!!.accid() != null) {
nimAccount = teacher.nim()!!.accid()
} else {
nimAccount = "jake"
}
if (teacher != null && teacher.nim() != null && teacher.nim()!!.token() != null) {
nimToken = teacher.nim()!!.token()
} else {
nimToken = "test"
}
安全运算符 ?.
s?.toUpdate() <=两者等价=> if (s!=null) s?.toUpdate() else null
Elvis运算符 ?: 请看这篇文章
两者结合,功能强大。
2. 安全运算符 ?. 与 let函数 配合使用
nimAccount?.let {
registerMsgRevokeFilter(it)
// 注册撤回观察者
registerMsgRevokeObserver()
}
上述代码等价于
if (nimAccount!=null){
registerMsgRevokeFilter(nimAccount!!)
// 注册撤回观察者
registerMsgRevokeObserver()
}
你可能觉得使用 let函数 并没有方便多少,
但这两种方式都可以实现 将可空类型的参数传递给非空函数
let函数
功能:把一个调用它的对象变成lambda表达式,常结合安全运算符使用。
安全调用"let"只在表达式不为null时,执行lambda
使用let函数,可以使代码更优雅~
网友评论