繁体   English   中英

Kotlin:模拟 NPE 时未解析的引用

[英]Kotlin: Unresolved reference while simulating NPE

我是 Kotlin 的新手,我正在尝试一些练习程序。
当我尝试使用以下方法模拟 NPE 时:! 运算符,但我的程序抛出以下错误:

Kotlin:未解决的参考:长度

我从这里获取了程序参考

我的程序是:

fun main(args: Array<String>){
    var b: String? = "Hello"     // variable is declared as nullable
    var blen = b!!.length
    println("b is : $b")
    println("b length is : $blen")

    b = null
    println("b is : $b")
    blen = b!!.length // <-- Here is the error
    println("b length is : $blen")
}

我期待这段代码中出现NullPointerException
知道这里出了什么问题吗?

PS:我已经看到类似的问题 - 这个这个但我没有发现任何相关的问题。

在这种情况下,编译器足够聪明,可以看到b在这个确切位置始终是null 所以理论上它可以将b智能转换为Nothing? (一种仅包含 null 值的类型)。

不确定它是否确实如此,但如果确实如此,那么很自然地会出现此错误,因为b!! 将是没有定义length属性的Nothing类型。

我想在编译时检测它比在运行时检测 NPE 更好。

编辑:如果你提取b!! 到一个变量中,你实际上会得到一个“无法访问的代码”错误,你可以看到这里的xNothing类型: 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM