美文网首页
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学习笔记:非空类型与可空类型

    记得在我一开始接触kotlin时,听到的最多的就是kotlin的类型安全,各种巴拉巴拉:dizzy_face:,关...

  • kotlin中的常见符号

    1.【?,?.,?:,!!,filterNotNull】可空类型与非空类型 【?可空类型】 在 Kotlin 中,...

  • Kotlin空安全

    可空类型与非空类型 在 Kotlin 中,类型分为可空引用和非空引用。例如,String 类型的常规变量不能容纳 ...

  • Kotlin 空安全

    可空类型与非空类型 在 Kotlin 中,类型区分引用可以为 null (可空引用),或不能为 null(非空引用...

  • Kotlin入门(二)空安全,空类型和非空类型

    可空类型和非空类型 不加问号的类型都是非空类型,非空类型不能赋 null 值. 返回值为非空类型的函数不也能返回 ...

  • 《Kotlin实战》- 6 Kotlin 的类型系统

    6.1 可空性 kotlin 中加入了可空类型的概念,编译器强制把类型分为可空的和非空的,可空类型通过在类型后加上...

  • Kotlin学习之空安全

    可空类型与非空类型 Kotlin 的类型系统旨在消除来自代码空引用的危险,也称为《十亿美元的错误》。许多编程语言(...

  • Kotlin基础认识 (5)可空数据类型

    一、可空类型概念 Kotlin的非空类型设计能够有效防止空指针异常。 定义可空类型 二、使用安全调用运算符 (?....

  • Kotlin null 检测机制、空安全、空指针问题

    空安全 Kotlin 引入可空类型、非空类型 Kotlin 的类型系统旨在消除来自代码空引用的危险 许多编程语言(...

  • 1.Kotlin空安全

    1.可空类型和非空类型 在Kotlin中,类型系统通过?来判断一个引用是否可以容纳null。非空类型声明如下: 如...

网友评论

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

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