美文网首页
Kotlin 学习笔记 1 :空安全 20200327

Kotlin 学习笔记 1 :空安全 20200327

作者: code点点DD | 来源:发表于2020-03-27 14:09 被阅读0次

    两句话:

    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就不会那么容易出现了。

    相关文章

      网友评论

          本文标题:Kotlin 学习笔记 1 :空安全 20200327

          本文链接:https://www.haomeiwen.com/subject/rwuluhtx.html