
上QQ阅读APP看书,第一时间看更新
6.2.5 不要使用不安全的断言运算符
这里还有一个运算符,即非空断言运算符!!,我想把它正式命名为小丑运算符,因为它是邪恶的化身,就像《蝙蝠侠》中的超级反派一样。起初它可能看起来很酷,直到你意识到它真正的邪恶本质。
我们看到,给定一个可空类型,在不进行null检查的情况下,我们不能调用其非空的对应项的方法。例如,给定一个类型String?的引用,如果不执行null检查,则不能对其调用reversed()方法。但是如果你确定引用不为null呢?然后,你可以让Kotlin停止严格的检查,让你可以对可空的对应项调用String的方法和属性。
如果我们知道那个名字,哪一个是类型String?,哪一个不为null,那么我们可以使用?.和?:来替换代码。使用这句:

这很简单——还会出什么问题呢?
那个运算符有两个!,这是有原因的。这里,我们将所有赌注都押在name不为null上。但是如果引用是null呢?哦。在运行时,我们最终会得到一个NullPointer-Exception——是的,这正是我们在一开始使用可空类型时试图避免的异常。不要使用!!,就当它不存在,就当我从来没有提到过。
如你所见,安全调用和Elvis运算符是处理可空类型的强大方法。但是,我们可以使用when参数匹配运算符使代码更加直观。