Kotlin不安全和安全類型轉換操作符

不安全的轉換操作符:as

有時無法轉換變數並拋出異常,這稱為不安全轉換。 不安全的強制轉換由中綴運算符執行。

可以為空的字串(String?)不能轉換為非null字串(String),這會引發異常。

un main(args: Array<String>){
    val obj: Any? = null
    val str: String = obj as String
    println(str)
}

以上程式拋出異常:

Exception in thread "main" kotlin.TypeCastException: null cannot be cast to non-null type kotlin.String
 at TestKt.main(Test.kt:3)

嘗試將Any類型的整數值轉換為字串類型導致生成ClassCastException

val obj: Any = 123
val str: String = obj as String
// Throws java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

源和目標變數需要可以為轉換工作:

fun main(args: Array<String>){
    val obj: String? = "String unsafe cast"
    val str: String? = obj as String? // Works
    println(str)
}

執行上面示例代碼,得到以下結果 -

String unsafe cast

Kotlin安全轉換操作符:as?

Kotlin提供安全轉換操作符:as?安全地轉換成一種類型。 如果無法進行轉換,則返回null,而不是拋出ClassCastException異常。

讓我們看一個例子,嘗試轉換任何類型的字串值,程式員最初不知道編譯器為可null string類型和可nullint類型。 如果可能的話,它會拋出值,或者返回null而不是拋出異常,甚至無法進行強制轉換。

fun main(args: Array<String>){

    val location: Any = "Kotlin"
    val safeString: String? = location as? String
    val safeInt: Int? = location as? Int
    println(safeString)
    println(safeInt)
}

執行上面示例代碼,得到以下結果 -

Kotlin
null

上一篇: Kotlin智能類型轉換 下一篇: Kotlin Elvis運算符