美文网首页
kolin学习笔记:非空类型与可空类型

kolin学习笔记:非空类型与可空类型

作者: 码途有道 | 来源:发表于2018-11-16 18:38 被阅读0次

    记得在我一开始接触kotlin时,听到的最多的就是kotlin的类型安全,各种巴拉巴拉:dizzy_face:,关键就不断的夸安全,其他的却是什么也没有解释,差点还没入门,就直接放弃。虽然确实这是kotlin的特性之一,但是听多了是真的腻啊!:scream:

    非空类型

    kotlin中,默认变量是为非空类型的,这意味着创建的变量不能为null,换另种说法就是你的变量必须初始化

    • 这是非空类型的写法,其实和我们平时其他语言的写法没有什么不同,只是多了个初始化赋值
    var a1: String = "a1"
    
    • 假如我们不初始化,会怎么样?
      在这里插入图片描述
      它会提示你必须初始化:joy:,当然也有方法也可以延迟初始化的时机,让你不必在一开始就初始化,但是本质上变量还是NotNull的,即使延迟了初始化时机,你也必须得初始化。这样好处就来了,在也不用像java中那样,在各种地方判断变量是否为null了,因为即使你对非空类型做if(a1 != null)的判断,返回的结果也永远是 true

    可空类型

    假如,我们在coding中,需要变量可空,可为null,该如何做呢?

    var a2: String? = null
    

    没错,只需要在变量的类型后面加上?,这样就表示a2可以为null

    但是可空类型在调用的时候,与非空类型是有区别的。

    • 非空类型被调用时,和java中的语法一样,直接调用
      if (a1.length === 2) {
          a1="true"
      } else {
          a1="false"
      }
    
    • 可空类型被调用时,在调用变量的方法时必须得在后面加个?
     if (a2?.length === 2) {
         a2="true"
     } else {
         a2="false"
     }
    

    a2?.length代表如果a2!=null,则返回a2.length;如果a2==null,则返回null

    上面的kotlin代码转换后的java代码

     String var10000 = this.a2;
     if (this.a2 != null) {
          if (var10000.length() == 2) {
              this.a2 = "true";
              return;
          }
     }
     this.a2 = "false";
    

    可空类型不能直接给非空类型赋值,?:的使用

    在这里插入图片描述
    上述场景中,当可空类型a2非空类型a1赋值时,会报错。因为a2可能为null,而a1不能为null,所以需要处理当a2null时的情况,如下
    class Test {
        var a1: String = "a1"
        var a2: String? = "a2"
        fun check() {
            a1 = a2 ?: "a1"
        }
    }
    

    a1 = a2 ?: "a1"中使用到了操作符?:,咋一看感觉像java中的三目运算符,其实他们是有所不同的。
    这里表示,当a2!=null时,a1=a2,当a2==null时,a1="a1"?:只针对a2==null时的情况时才选"a1",或者可以说?:只能针对它前面的对象为null时(即判断条件为前面的对象是否为null),才能选择它后面的对象。

    非空断言!!

    像上面那种使用?:的方法,有的时候对于我们来说过于臃肿与繁琐,在一些情况下,我们可以明确我们的可空对象不为空
    那么此时就可以使用操作符!!

    class Test {
       var a1: String = "a1"
       var a2: String? = "a2"
       fun check() {
           a1 = a2!!
       }
    }
    

    这样,我们的代码就可以更简洁,但是如果当a2==null时,我们使用a1=a2!!,则会抛出空指针异常,所以使用需谨慎!以下是转换后的java代码,可以明确看到a2==null,则抛出异常

    在这里插入图片描述

    相关文章

      网友评论

          本文标题:kolin学习笔记:非空类型与可空类型

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