Kotlin 学习笔记 1 :空安全 20200327

2020-03-27  本文已影响0人  code点点DD

两句话:

1、语法上,要求不能null的,如果编译时能发现违反了不能null的约定。则编译不通过。

总有变量,编译时,是不能够知道是不是为空。这个时候还是要进行空判断。

2、对于这个空判断。kotlin的语法糖提供了简易的判断方法;(来实现所谓的空安全)

a、!!如果是空就nullpointexception(懒惰,没有默认值)

b、?如果是null,返回默认值,而不是exception。(就空安全了())😅

c、varString?.length()?:-1 类似上面的情况,不过将返回的null修改为一个默认值。

友情连接:友情连接

这篇文章说的比较合理:尽可能避免NPE,没有办法消除

空安全符号:

非null 申明:String

可null 声明: String?

可 null 调用:varName?.length()  null 时返回null

可null 调用:如果varName?.length()?:-1 与上面一个不同的是,返回一个默认值而不是null

保证不null:调用:varName!!.length()  如果保证失败,就NPE

类型安全转换:

避免ClassCastException,

val aInt: Int? = a as? Int  如果失败,返回null而不是 ClassCastException

总结来说:

Kotlin要求:对于一个变量,要么你很自信,保证不为null;要么要把null的不确定性申明出来。二者必取其一。

对于一个变量,你要以保证不空的语法描述;(String , stringVar.length)

        那么如果还是出现了空:

           1、 编译时不通过,尽早发现是好事;

            2、运行时:不好意思,还是会NPE

如果你不能保证不为Null 那么要把这个不确定性,以语法的形式显示说明。

kotlin知道后会尽可能的帮你保证null安全。

如果不告诉kotlin这种不确定性,不好意思。Kotlin帮不了你。

转向上面👆那种情况。kotlin会以为你很自信,不为null。

       1、 申明:String? 调用 varString?.  如果null那么返回null而不是NPE

       2、 以上情况的增强版:如果null,那么返回一个默认值,而不是null

       3、最后,一个nullAble的变量,你却很自信。好:那就varString!!.length()👉如果是你自信过头了。不好意思。还是NPE

技巧:

我们的首要、主要精力应该花费在变量声明时:决定是否绝不null,或者无法确定是否null

如果你申明为,无法确定是否null,那么剩下的交由kotlin,它会尽力帮助你。

只要你不是过分自信,结果自信过头(申明了一个会null的变量为String ;一个可null的变量varString!!.length())

NPE就不会那么容易出现了。

上一篇 下一篇

猜你喜欢

热点阅读