Kotlin 的空指针(String?) 变量,似乎没有完美解决问题!


#1

fun main(args: Array) {
Player()
}

class Player() {
val name: String
private fun firstLetter() = name[0]

init {
    println(firstLetter())
    name = "Madrigal"
}

}

编译通过,运行指示空指针引用!
Exception in thread “main” java.lang.NullPointerException
at neeme.device.Player.firstLetter(Main.kt:11)
at neeme.device.Player.(Main.kt:14)
at neeme.device.MainKt.main(Main.kt:5)

Process finished with exit code 1


#2

所以就算没用使用空指针变量(String?)定意,也不可能百分百不会发生运行时空指针引用异常!
上面的例子,是在<<Kotlin 编程权威指南>>看到的。
是不是说明Kotlin 大费周详使用空指针变量概念是多余呢?


#3

能解决掉百分之八十的NPE就很值得吧,相对于Java动不动就是NullPoniterException,kotlin已经做到很好了,在编译阶段就解决了大部分空指针问题的发生,这就足够了。剩下的百分之二十需要程序员有优秀的判断能力了。


#4

明显出现了过早引用的问题。

这就好像我就不给你赋值,看你能不能抛异常一样。。。


#5

这种逻辑的代码已经跟语言无关了,计算机没办法运行。。


#6

不规范的编码习惯…这种无解,类加载机制决定的


#7

建议学下 Rust


#8

你好,Rust 没有接触过。 兄的意思是 Rust 能完美解决空指针的问题?


#9

可以这么认为。


#10

听说 微软 准备用 Rust 改写 windows 的很多 c 的组件,并且在 Rust 的基础上开发一个新语言。


#11

bennyhuo 说的对呀,引用过早了。 目前来看,val 定义的变量在 init 或者构造方法中进行赋值了就不会报错


京ICP备16022265号-2 Kotlin China 2017 - 2018