[基要稳]Kotlin 之 [ ?. ] 、 [ !! ] 、 [ ?: ]

写于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")
        }
  1. !! 其实就和java对对象的处理是一样的了,当使用的对象不为空时就正常执行,为空时就抛出异常。
        val list: ArrayList<String>? = null
        // 类似java的三目表达式
        if (list?.size ?:0> 1) {
            println("list is empty")
        }
  1. ?: 判断对象为null的三目表达式,list?.size ?: 0 等价于 list.size==null?0:list.size
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 很多同学刚上手使用Kotlin知道它有针对Java NullPointerException的管理,而在Kotli...
    Jason_Samuel阅读 46,037评论 10 56
  • 在 Kotlin 中的变量、常量以及注释多多少少和 Java 语言是有着不同之处的。下面详细的介绍 Kotlin ...
    驰同学阅读 983评论 0 2
  • Java 基础 语言特性 优点 ① 平台无关,摆脱硬件束缚,"一次编写,到处运行"。 ② 安全的内存管理和访问机制...
    续袁阅读 623评论 0 1
  • 3.6 代码注释 正如 Java 和 JavaScript,Kotlin 支持行注释及块注释。 与 Java 不同...
    谷哥得小弟阅读 784评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,624评论 28 53