上QQ阅读APP看书,第一时间看更新
3.2 可空类型
或许Java和Android开发者早已厌倦了空指针异常(Null Pointer Exception)。因为其在运行时总会在某个意想不到的地方忽然出现,让开发者感到措手不及。
那么为何开发者不能在编译时就提前发现这类空指针异常,并大量修复这些问题呢?现代编程语言正是这么做的。Kotlin自然也不例外。在Java 8中,我们可以使用Optional类型来表达可空的类型。
运行程序,输出如下:
3 0
但是这样的代码依然不是那么“优雅”。
针对这方面,Groovy提供了一种安全的属性/方法访问操作符“?.”:
user?.getUsername()?.toUpperCase(); //安全调用符 ?.
Swift也有类似的语法,只作用在Optional的类型上。
Kotlin中使用了Groovy里面的安全调用符,并简化了Optional类型的使用,直接通过在类型T后面加个“?”,就表达了Optional的意义。
上面Java 8的例子用Kotlin来写就显得更加简单、“优雅”了:
其中,我们使用String?同样表达了Optional的意思,相比之下,哪种方式更简单?答案一目了然。
还有Java 8的Optional提供的orElse:
s.orElse("").length();
其在Kotlin中是最最常见的Elvis运算符了:
s?.length ?: 0
相比之下,我们还有什么理由继续用Java 8的Optional呢?