前言
相传NPE值十亿美金。哇~那是好多?
Kotlin为何这么??号称解决了NPE呢?
① NPE从哪里来
② Kotlin从哪几个方面解决了NPE
③ Kotlin到底解决了什么?
④ 在什么时候,Kotlin的NPE解决方案是失灵的?
NPE的来源
有四个来源
- 显式调用 throw NullPointerException()
- 使用了 !! 操作符
- 这是Kotlin提供的用户可强制抛出NPE的操作符
- 使用了!!只要碰到NPE就会如期抛出
- 有些数据在初始化时不一致
- this泄漏
未初始化的this被传递,并用于其他地方 - 调用了一个 超类中的open成员,并在 派生类中使用了 该open成员的未初始化 状态
- this泄漏
- Java 互操作
- 企图访问平台类型的 null 引用的成员
- 平台类型 即 Java 声明的类型
- java的引用可能是null
- 平台类型的范例
val list = ArrayList<String>() // 非空(构造函数结果) list.add("Item") val size = list.size // 非空(原生 int) val item = list[0] // 推断为平台类型(
- 企图访问平台类型的 null 引用的成员