我們都知道Kotlin如何應對出現在java中的“Billion Dollar Mistake”,就是改善處理空指針(NPE)的方式。令人驚訝的是,大多數開發者認為Kotlin已經去掉啦NPE或者它已經自行處理掉啦。實際上,Kotlin想表達的是“Kotlin中是沒有nulls的,除非你顯式聲明”,沒有變量是默認為空的。
我們只是在Kotlin中區別啦一下空對象和非空對象,也得像以前在java中明確地去處理它們。
Kotlin默認強制給每一個對象初始化一個值而且不可為空。
var showButton: Button = null // 編譯時錯誤
當使用一個可空類型時,必須使用安全操作符?.或者非空斷言操作符!!來訪問這個可空變量。
此種情形下,如果x為空,這個表達式也將返回空,所以y的類型時Double?.可能存在一種情形,當你知道你的對象不能為空,此時你可以使用!!來斷言該對象不為空,從而無需再做空檢查。(建議不要使用斷言操作符,這和你以前使用java時的做法沒差啊)
斷言操作符!!將任何值都轉化為一個非空類型,如果該值為空,將會拋出一個NPE.
requireNotNull() vs !!
區別在于x!!當x為空時拋出一個NPE,requireNotNull(x)拋出IllegalArguementException
翻譯自:The different ways to handle Nullable type in Kotlin](https://medium.com/mindorks/the-different-ways-to-handle-nullable-types-in-kotlin-cc086fa206fa)