个性化阅读
专注于IT技术分析

Kotlin不安全和安全的转换操作符

本文概述

不安全的转换操作符:as

有时无法强制转换变量并引发异常, 这称为不安全强制转换。不安全的强制转换由infix运算符as执行。

无法将可为空的字符串(String?)强制转换为非nullabe字符串(String), 这将引发异常。

fun 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 Safe Cast运算符:as?

Kotlin提供了一个安全的转换操作符吗?安全地转换为类型。如果无法强制转换, 则返回null, 而不是引发ClassCastException异常。

让我们看一个示例, 尝试将程序员最初不知道的任何类型的字符串值都转换为可空字符串和可空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
赞(0)
未经允许不得转载:srcmini » Kotlin不安全和安全的转换操作符

评论 抢沙发

评论前必须登录!