美文网首页
Kotlin 空安全

Kotlin 空安全

作者: 技术客栈 | 来源:发表于2020-09-10 18:37 被阅读0次

简介

  Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException。减少线上NullException 异常的发生。使我们的程序更加的稳定和健壮。

可空类型与非空类型

  Kotlin 中区分可空类型与非空类型。那么系统当中又是怎么区分这两种类型的呢?如下:

  1. String 类型的常规变量不能容纳 null:
private fun method(){
      var result:String = "abc"
      result = null
}

当赋值result=null 的时候编译器报错 提示 Null can not be a value of a non-null type String

  1. 变量为可空类型
private fun method(){
      var result:String? = "abc"
      result = null
      Log.i("wly",result)
}

编译不在报错执行输出 null。加上? 之后一个 Kotlin 变量就像 Java 变量一样没有非空的限制。

安全调用 ?.

private fun method(){
     var result:String? = "abc"
     Log.i("wly","length =${result.length}")
}

  当我们变量使用可空 ? 操作符之后,由此引发另一个问题就是空引用导致出现空指针异常,IDE 编译器报错 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

修正:

private fun method(){
     var result:String? = "abc"
     Log.i("wly","length =${result?.length}")
}

该代码会对变量做一次非空确认之后再调用方法,这是 Kotlin 的写法,并且它可以做到线程安全。

!! 操作符

private fun method(){
     var result:String? = "abc"
     Log.i("wly","length =${result!!.length}")
}

非空断言运算符(!!)将任何值转换为非空类型,若该值为空则抛出异常。实际上和 Java 就没什么两样了,从而也就享受不到 Kotlin 的空安全设计带来的好处啦。示例代码如果 result==null 将会出现NullException 异常。

安全的类型转换

如果对象不是目标类型,那么常规类型转换可能会导致 ClassCastException。 另一个选择是使用安全的类型转换,如果尝试转换不成功则返回 null:

private fun method(){
      var result:String? = "abc"
      val test: Int? = result as? Int
}

可空类型的集合过滤 .filterNotNull()

可空类型元素的集合,并且想要过滤非空元素,你可以使用 filterNotNull 来实现

private fun listMethod(){
        val nullableList: List<Int?> = listOf(1, 2, null, 4)
        val intList: List<Int> = nullableList.filterNotNull()
        Log.i("wly","intList = $intList")
    }

参考

Kotlin 中文网 https://www.kotlincn.net/docs/reference/null-safety.html

相关文章

  • Android开发kotlin学习(二)

    1.kotlin的空安全 为啥子说kotlin是空安全的?和Java相比,kotlin的空安全可以带来哪些便利之处...

  • Kotlin - 空安全

    1.Kotlin空安全介绍 Kotlin空安全可消除来自代码空引用的危险。 2.什么是空引用? 许多编程语言(包括...

  • Kotlin学习之空安全

    Kotlin学习之空安全 Kotlin相对于Java有许多改良的地方,空安全就是其中的一部分,Kotlin因此解决...

  • 2017-07-18-kotlin Android基础

    kotlin Android基础 1,实现一个基本的数据类 2,空安全: Kotlin,如很多现代的语言,是空安全...

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

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

  • Kotlin空安全

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

  • Kotlin 空安全

    简介   Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException。减少线上Nul...

  • Kotlin 空安全

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

  • Kotlin(空安全)

    空安全 可空类型和非空类型 在 Kotlin 类型系统中可以为空和不可为空的引用是不同的。比如,普通的 Strin...

  • Kotlin 空安全

    前言 当我们使用 Java 开发的时候,如果不想遇到 NullPointerException,我们就需要在使用它...

网友评论

      本文标题:Kotlin 空安全

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