推荐答案
在 Kotlin 中,安全转换运算符 as? 用于尝试将对象转换为指定类型。如果转换成功,则返回转换后的对象;如果转换失败(即对象不是目标类型),则返回 null,而不会抛出 ClassCastException 异常。
本题详细解读
1. 安全转换运算符的基本用法
as? 运算符用于在不确定对象类型的情况下进行类型转换。它的语法如下:
val result = obj as? TargetType
obj是要转换的对象。TargetType是目标类型。result是转换后的结果。如果obj是TargetType类型,则result为obj转换后的对象;否则,result为null。
2. 与普通转换运算符 as 的区别
- 普通转换运算符
as:如果对象无法转换为目标类型,会抛出ClassCastException异常。 - 安全转换运算符
as?:如果对象无法转换为目标类型,返回null,不会抛出异常。
3. 使用场景
as? 通常用于以下场景:
- 当你不确定对象的类型时,可以使用
as?进行安全转换,避免程序因类型转换失败而崩溃。 - 在处理多态对象时,可以使用
as?来检查对象是否属于某个特定类型。
4. 示例代码
val obj: Any = "Hello" // 安全转换 val str: String? = obj as? String println(str) // 输出: Hello val num: Int? = obj as? Int println(num) // 输出: null
在这个例子中,obj 是一个 Any 类型的对象,实际存储的是一个 String。使用 as? 进行安全转换时,str 成功转换为 String 类型,而 num 由于无法转换为 Int 类型,返回 null。