1-5空類型和智能類型轉(zhuǎn)換

空類型安全問題
判斷值是否為空,如果為空,則直接返回空,否則,返回相應值

fun getName():String?{
       return null                     
}
問號的意思是允許為空
fun main(args:Array<String>){

null類型

val name=getName()
println(name?.length)
判斷name是否為空,為空就輸出Null
}

聲明可null類型但本身不為null

val value:String?="heloword"
-->
println(value!!.length)
告訴編譯器,我知道他不為null,編譯器可以繼續(xù)往下走。
或者
if(value!=null)
println(value.length)

智能類型轉(zhuǎn)換
聲明對象
val parent:Patent=Child()
parent類型是Child的一個實例
if(parent is Child){
printIn(parent.name)
}

安全類型轉(zhuǎn)換加?
val parent:Parent=Parent()
val child:Child?=parent as Child
相當于Java的強轉(zhuǎn)類型。在這里加了問號是可null類型,那么,編譯的時候就會出錯。
解決方法是
val child:Child?=parent as? Child;
意思是如果child為null就返回null,這就避免了出錯。

小結(jié)
1)任意類型都有可空和不可空的兩種
編譯器判斷

->val notNull:String=null (X) 不能為空
->val nullable:Stirng?=null 可以為空
->notNull.length 不為空值可以直接運行
->nullable.length (X)可能為空,不能獲取它的長度
->nullable!!.length 強制認定它不為空
->nullable?.length 若為空,則返回null

智能類型轉(zhuǎn)換
java 類型轉(zhuǎn)換

val sub:SubClass=parent as SubClass
類似Java的類型轉(zhuǎn)換,失敗則拋異常

安全類型轉(zhuǎn)換

val sub:SubClass?=parent as?SubClass
如果轉(zhuǎn)換失敗,返回null,不拋異常。

if(parent is SubClass)parent<子類的成員>)
編譯器盡可能推到類型,遠離無用的類型轉(zhuǎn)換
if(nullable!=null)nullable.length
這是對的,因為我們知道nullable不為空,它不為空則才能繼續(xù)執(zhí)行代碼塊。




最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容