Kotlin 中安全转换运算符 (as?) 的作用是什么?

· 约 2 分钟读完 · 第 12 / 200 章

推荐答案

在 Kotlin 中,安全转换运算符 as? 用于尝试将对象转换为指定类型。如果转换成功,则返回转换后的对象;如果转换失败(即对象不是目标类型),则返回 null,而不会抛出 ClassCastException 异常。

本题详细解读

1. 安全转换运算符的基本用法

as? 运算符用于在不确定对象类型的情况下进行类型转换。它的语法如下:

  • obj 是要转换的对象。
  • TargetType 是目标类型。
  • result 是转换后的结果。如果 obj 是 TargetType 类型,则 result 为 obj 转换后的对象;否则,result 为 null。

2. 与普通转换运算符 as 的区别

  • 普通转换运算符 as:如果对象无法转换为目标类型,会抛出 ClassCastException 异常。
  • 安全转换运算符 as?:如果对象无法转换为目标类型,返回 null,不会抛出异常。

3. 使用场景

as? 通常用于以下场景:

  • 当你不确定对象的类型时,可以使用 as? 进行安全转换,避免程序因类型转换失败而崩溃。
  • 在处理多态对象时,可以使用 as? 来检查对象是否属于某个特定类型。

4. 示例代码

在这个例子中,obj 是一个 Any 类型的对象,实际存储的是一个 String。使用 as? 进行安全转换时,str 成功转换为 String 类型,而 num 由于无法转换为 Int 类型,返回 null。