一、如何調用?
在對象后面使用"?"符號。
當一個對象添加了"?"符號,只會在這個對象存在的時候被調用,否則將會忽略它,安全運行程序。
舉例:
val context : Context? = null
val res = context?.getResources() // 不會崩潰,但是 res 將為空.
二、調戲
我們知道上面的代碼不會使程序崩潰,那么我們可以這樣調戲Kotlin,我們繼續使用可以為空的對象,代碼最終會是這樣:
val context : Context? = null
val res = context?.getResources() // 不會崩,但為空
val appName = res?.getString(R.string.app_name) // 不會崩,但為空
val shortName = appName?.substring(0, 2) // 不會崩,但為空
我們發現,這樣下去是很可怕的,因為我們在實際項目中,是不會讓對象為空的。那么我們如何判斷非空的呢?如果只是檢測context 不為空,可以省略掉"?"符號:
//第一種 java方式
val context : Context? = null
if (context != null) {
val res = context.getResources() // 不需要 '?'
val appName = res.getString(R.string.app_name)
val shortName = appName.substring(0, 2)
}
//第二種 kotlin方式
val context : Context? = null
context?.let {
val res = context.getResources() // 不需要'?'
val appName = res.getString(R.string.app_name)
val shortName = appName.substring(0, 2)
}
三、總結
使用kotlin的非空判斷方式可以靈活的替換掉Java的非空判斷,省略掉"?"符號。