Kotlin空安全空類型淺談
正文
首先非空變量和可空變量的區(qū)別:
// name為不可為空的變量, 不能賦值為null ,若有判斷 if(name==null) 無意義,因?yàn)榭隙ú粸閚ull var name : String = "" // role 為可空變量 var role : String? = ""
非空變量賦值為Null為報(bào)如下錯(cuò)誤:

一、判斷可空變量是否為null的方式
1、
var name : String ?= ""
if (name == null){
Log.i(Tag,"name==null")
}else{
Log.i(Tag, "name!=null")
}2、
?.的意思為若name為null 。則返回null
var name : String ?= "abc"
Log.i(Tag,"name="+name?.length)二、涉及到返回可空值的函數(shù)使用方法,在返回類型后同時(shí)加?
var name:String?="abc"
fun getNameLength():String?{
return name
}三、let操作符
用法:變量?.let{ ... } , 作用為忽略null的情況
例如篩選出一個(gè)集合非空的元素集合
常規(guī)寫法:
fun logUnNullList(arr:Array<String>):Unit{
for (item in arr){
if (arr==null){
continue
}else{
Log.i(Tag,"非空元素為->"+item)
}
}
}用let操作符寫法:
fun logUnNullList(arr:Array<String>):Unit{
for (item in arr){
item?.let {Log.i(Tag,"非空元素為->"+item) }
}
}四、Evils操作符(?: !! as)
1、?:
對(duì)于一個(gè)可空變量的使用,若當(dāng)該變量為空的時(shí)候賦予一個(gè)特定值使用
var name:String?="abc" var nameLength:Int = 0 nameLength = name?.length?:-1 // 取name的length ,若name為null,則nameLength的值為-1
這樣要比傳統(tǒng)寫法 if(name==null) -1 else name.length 要簡(jiǎn)介
2、!!
在一個(gè)可空變量使用的時(shí)候后面加上!! ,則當(dāng)該變量為null的時(shí)候拋出空指針異常
var name:String?=null nameLength = name!!.length
此時(shí)name為null ,因?yàn)槭褂昧?! ,則拋出空指針異常

3、as、as?
類型轉(zhuǎn)換
當(dāng)使用as的時(shí)候若類型轉(zhuǎn)換失敗則拋出類型轉(zhuǎn)換(ClassCastException)異常
當(dāng)使用as?的時(shí)候若類型轉(zhuǎn)換失敗則返回null,不會(huì)拋出異常
var name:String?= 12 as String
可見12 轉(zhuǎn)換String 類型異常

當(dāng)使用as?的時(shí)候
var name:String?= 12 as? String Log.i(Tag,"name="+ name) // 打印日志: name=null
總結(jié):
拋出異常的 !! as 盡量少用,用as? ?. ?: let來代替
以上就是Kotlin空安全空類型淺談的詳細(xì)內(nèi)容,更多關(guān)于Kotlin空安全空類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android自定義控件實(shí)現(xiàn)底部菜單(下)
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)底部菜單的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android Intent與IntentFilter案例詳解
這篇文章主要介紹了Android Intent與IntentFilter案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Android利用Paint自定義View實(shí)現(xiàn)進(jìn)度條控件方法示例
這篇文章主要給大家介紹了關(guān)于Android利用Paint自定義View實(shí)現(xiàn)進(jìn)度條控件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
Moshi?完美解決Gson在kotlin中默認(rèn)值空的問題詳解
這篇文章主要為大家介紹了Moshi?完美解決Gson在kotlin中默認(rèn)值空的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Android開發(fā)跳轉(zhuǎn)應(yīng)用市場(chǎng)進(jìn)行版本更新功能實(shí)現(xiàn)
這篇文章主要為大家介紹了Android實(shí)現(xiàn)跳轉(zhuǎn)到應(yīng)用市場(chǎng)進(jìn)行版本更新功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Android應(yīng)用啟動(dòng)速度優(yōu)化
這篇文章主要介紹了Android應(yīng)用啟動(dòng)速度優(yōu)化的相關(guān)資料,需要的朋友可以參考下2016-01-01
Android實(shí)現(xiàn)自動(dòng)播放圖片功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自動(dòng)播放圖片功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android使用系統(tǒng)相機(jī)進(jìn)行拍照的步驟
這篇文章主要介紹了Android使用系統(tǒng)相機(jī)進(jìn)行拍照的步驟,幫助大家更好的進(jìn)行Android開發(fā),感興趣的朋友可以了解下2020-12-12

