写于2020年01月08日
一、Kotlin中?. / !! / ?: 的理解
val list: ArrayList<String>? = null
// ? 对象不为空时执行
if (list?.size > 1) {
println("list is empty")
}
1.以上代码:编译期就会报错,当我们判断list.size的时候,编译器会告诉我们"Operator call corresponds to a dot-qualified call 'list?.size.compareTo(0)' which is not allowed on a nullable receiver 'list?.size'."。大概意思是,当list为null的时,它的size返回就是"null",但是"null"不可以和int值比大小,所以编译器建议我们写成roomList?.size!! > 0。
val list: ArrayList<String>? = null
// !! 和正常的java一样,不为空时执行,为空时抛出异常
if (list?.size!! > 1) {
println("list is empty")
}
- !! 其实就和java对对象的处理是一样的了,当使用的对象不为空时就正常执行,为空时就抛出异常。
val list: ArrayList<String>? = null
// 类似java的三目表达式
if (list?.size ?:0> 1) {
println("list is empty")
}
- ?: 判断对象为null的三目表达式,list?.size ?: 0 等价于 list.size==null?0:list.size