美文网首页
Kotlin(空安全)

Kotlin(空安全)

作者: 小浩_w | 来源:发表于2018-12-18 15:26 被阅读0次

空安全

可空类型和非空类型

在 Kotlin 类型系统中可以为空和不可为空的引用是不同的。比如,普通的 String 类型的变量不能为空:

var a: String ="abc"
a = null //编译错误

允许为空,我们必须把它声明为可空的变量:

var b: String? = "abc"
b = null

现在你可以调用 a 的方法,而不用担心 NPE 异常了:

val l = a.length()

但如果你想使用 b 调用同样的方法就有可能报错了:

val l = b.length() //错误:b 不可为空

在条件中检查 null

首先,你可以检查 b 是否为空,并且分开处理下面选项:

val l = if (b != null) 
b.length() 
else
 -1

编译器会跟踪你检查的信息并允许在 if 中调用 length()。更复杂的条件也是可以的:

if (b != null && b.length() >0)
  print("Stirng of length ${b.length}")
else
  print("Empty string")

注意只有在 b 是不可变时才可以

安全调用

第二个选择就是使用安全操作符,?.:
b?.length()

如果 b 不为空则返回长度,否则返回空。这个表达式的的类型是 Int?
安全调用在链式调用是是很有用的。比如,如果 Bob 是一个雇员可能分配部门(也可能不分配),如果我们想获取 Bob 的部门名作为名字的前缀,就可以这样做:

bob?.department?.head?.name

这样的调用链在任何一个属性为空都会返回空。

Elvis 操作符

当我们有一个 r 的可空引用时,我们可以说如果 r 不空则使用它,否则使用使用非空的 x :

val l: Int = if (b != null) b.length() else -1

尽管使用 if 表达式我们也可以使用 Elvis 操作符,?:

val l = b.length()?: -1

如果 ?: 左边表达式不为空则返回,否则返回右边的表达式。注意右边的表带式只有在左边表达式为空是才会执行
注意在 Kotlin 中 throw return 是表达式,所以它们也可以在 Elvis 操作符右边。这是非常有用的,比如检查函数参数是否为空;

fun foo(node: Node): String? {
  val parent = node.getParent() ?: return null
  val name = node.getName() ?: throw IllegalArgumentException("name expected")

  //...
}

!! 操作符
第三个选择是 NPE-lovers。我们可以用 b!! ,这会返回一个非空的 b 或者抛出一个 b 为空的 NPE
val l = b !!.length()

安全转换

普通的转换可能产生 ClassCastException 异常。另一个选择就是使用安全转换,如果不成功就返回空:
val aInt: Int? = a as? Int

相关文章

  • 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/gvclkqtx.html