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
類型和可null
的int
類型。 如果可能的話,它會拋出值,或者返回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