美文网首页
Kotlin 空安全

Kotlin 空安全

作者: cgzysan | 来源:发表于2019-04-10 16:48 被阅读0次

前言

当我们使用 Java 开发的时候,如果不想遇到 NullPointerException,我们就需要在使用它之前不停的判断它是否为 null,而 Kotlin 是空安全的,我们在编译时期就处理了各种 null 的情况,避免了执行时异常。

空安全

// 不能通过编译,Artist 不能是 null
var notNullArtist : Artist = null

// Artist 可以是 null
var artist: Artist? = null

// 无法编译, artist可能是null,我们需要进行处理
artist.print()

// 只要在artist != null时才会打印
artist?.print()

// 只有在确保artist不是null的情况下才能这么调用,否则它会抛出异常
artist!!.print()

// 使用Elvis操作符来给定一个在是null的情况下的替代值
val name = artist?.name ?: "empty"
1. 安全调用符 ?.

?. 会被编译为一个三目运算表达式,如果 ?. 前的对象不为 null,则调用 ?. 后的方法或属性,否则返回 null。

2. Elvis 操作符 ?:

Elvis 操作符是三目条件运算符的简略写法,用于指出一个是 null 的情况下的替代值。

Kotlin 中可以用 Elvis 操作符配合安全调用符,实现简单清晰的空检查和空操作。

转化关系:

  • A ?: B 等价 if (A == null) B
  • A?.B ?: C等价 if (A != null) A.B else C

不建议广泛使用!!操作符

Kotlin 不建议在代码中广泛使用 !! 操作符,这回浪费 Kotlin 设计良好的非空类型,每一个 !! 都意味着一个未处理的 NullPointerException ,让 Kotlin 代码充斥着 NPE

1. 用 val 而不是 var

在 Kotlin 中 val 代表只读,var 代表可变。val 是线程安全的,而且不需要担心 null 的问题。

2. 使用lateinit

在 Android 定义一些成员变量的时候,经常需要在 onCreate 方法中初始化,这个时候我们就用不了 val,针对这种情况,Kotlin 提供了 lateinit 关键字,就和其表面意思一样,“晚些初始化”。

3. 使用 Elvis 操作符

指出一个 null 情况下的替代值。

4. 使用 let 函数

let 函数定义就是,默认当前这个对象作为闭包的it参数,可以 return 返回函数的执行结果。一般要与安全调用符配合使用:

private var msg: String? = null

fun main(args: Array<String>) {
    msg = "Kotlin from ysan"
    var a = msg?.let { sendMessage(it) }
}

fun sendMessage(message : String) {
    for (s in message) {
        println(s)
    }
}

相关文章

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