Kotlin - 安全转换

Kotlin - 安全转换 首页 / Kotlin入门教程 / Kotlin - 安全转换

有时无法强制转换变量并引发异常,这称为不安全强制转换。不安全的强制转换由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

源变量和目标变量需要为可为null才能强制转换才能正常工作:

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

输出:

String unsafe cast

安全转换 as?

Kotlin提供了一个安全转换 as? 安全地转换为类型。如果无法强制转换,则返回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

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

白话法律42讲 -〔周甲徳〕

大规模数据处理实战 -〔蔡元楠〕

透视HTTP协议 -〔罗剑锋(Chrono)〕

移动端自动化测试实战 -〔思寒〕

性能测试实战30讲 -〔高楼〕

跟月影学可视化 -〔月影〕

OAuth 2.0实战课 -〔王新栋〕

Linux内核技术实战课 -〔邵亚方〕

Rust 语言从入门到实战 -〔唐刚〕

好记忆不如烂笔头。留下您的足迹吧 :)