美文网首页
Kotlin 类型安全(对空指针的优化处理)

Kotlin 类型安全(对空指针的优化处理)

作者: ChenME | 来源:发表于2018-07-21 17:13 被阅读36次

Kotlin 类型安全(对空指针的优化处理)


  • 首先我们看下面的一段 java 代码:
public static void main(String[] args){
    System.out.println(getName().length());
}

public static String getName(){
    return null;
}
  • 如果运行 main 函数,jvm 会报 Exception in thread "main" java.lang.NullPointerException 的错误。相信大家在 codding 的时候稍有不慎就会遇到这个问题,非常让我们头疼。为了安全起见,我们要做大量的空指针判断,我们的时间严重浪费了在这些毫无技术含量的处理上。于是我们的 main 函数变成了:
public static void main(String[] args) {
    String name = getName();
    if (null == name) {
        System.out.println("未获取到 name!");
        return;
    }
    System.out.println(name.length());
  • 但是 Kotlin 的出现,挽救了我们处理空指针的时间。同样的我们看下面一段代码:
fun getName(): String {
    return null // 这种情况在 Kotlin 中是不允许的
}
  • 同样是返回一个 String 类型的 getName() 函数,在 Kotlin 中如果返回 null 是无法通过编译的。
  • 这样做,很显然避免的了出现空指针的可能性,但是问题又来了,如果 getName() 就是可以返回 null 呢?很简单,我们在返回值类型后面加一个 ? 就表示可以返回 null 了,于是代码变成了:
fun getName(): String? {
    return null
}
  • 那接着问题又来了,这样不是又跟 Java 一样了吗?同样存在空指针的危险:
fun getName(): String? {
    return null
}

fun main(args: Array<String>) {
    println(getName().length) // 编译通不过,getName()有可能为null
}
  • 由于上面的那段代码编译无法通过,于是只好进行空指针判断了
fun getName(): String? {
    return null
}

fun main(args: Array<String>) {
    var name = getName()
    if(null==name){
        println("未获取到 name!")
        return
    }
    println(name.length)
}
  • 这样一来,Kotlin 代码和 Java 就一样了,没什么优点了!不!其实上面的代码是可以简化的
fun getName(): String? {
    return null
}

fun main(args: Array<String>) {
    println(getName()?.length) // null
}
  • 上面的代码的意思就是,如果 getName() 不为空,则打印长度,否则就返回。
  • 如果知道一个值不可能为空,但是在定义的时候定义了有可能为空,而且也不想在判断,该怎么将解决?
val aString: String? = "Hello Kotlin"
println(aString.length) // 编译错误
  • 这个时候就可以使用强制执行,就是在变量后面加两个 !
val aString: String? = "Hello Kotlin"
println(aString!!.length) // 12

相关文章

  • Kotlin 类型安全(对空指针的优化处理)

    Kotlin 类型安全(对空指针的优化处理) 首先我们看下面的一段 java 代码: 如果运行 main 函数,j...

  • 一,为什么学习kotlin?

    空类型安全空安全特性让kotlin移除了实时出现的空指针异常的风险 Lambda表达式 扩展方法 类型推导类型推断...

  • Kotlin 空指针

    针对空指针问题, Kotlin有专门的针对语法以避免问题。 可空类型 默认声明的变量是不能为 null 的,如果要...

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

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

  • Kotlin空类型安全处理总结

    在很多编程语言中 NullPointerException (NPE) 是最常见的异常之一,在 Java 中 NP...

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

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

  • Kotlin空类型安全(Null Safety)

    Kotlin——空类型安全(Null Safety) 本篇文章主要是翻译自Kotlin官方文档的Null Safe...

  • swift基础_指针

    一.swift指针类型 swift认为指针是不安全的,所有指针的类的前缀为unsafe UnsafePointer...

  • go语言指针类型的使用

    go语言的指针类型 简单地说go语言的指针类型和C/C++的指针类型用法是一样的,除了出去安全性的考虑,go语言增...

  • Kotlin入门指南

    Kotlin的优势 代码简洁高效、强大的when语法,不用写分号结尾,findViewById光荣退休,空指针安全...

网友评论

      本文标题:Kotlin 类型安全(对空指针的优化处理)

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