前言
本文需要找几个问题。
① 什么时候会产生类型安全问题?
② 智能转换在什么时候是支持的
③ 如何规避类型安全问题
什么是类型安全
经过类型擦除后,依旧可以通过检测,确保当前的变量类型是确定的某个类型
类型检测:is
会用到两个操作符
- is
- !is
类型转换:as
val myType as Date
智能转换
在许多情况下,不需要在 Kotlin 中使用显式转换操作符,因为编译器跟踪不可变值的 is-检测以及显式转换,并在需要时自动插入(安全的)转换
来看个范例一
fun demo(x: Any) {
if (x is String) {
print(x.length) // x 自动转换为字符串
}
}
再看个范例二
if (x !is String) return
print(x.length) // x 自动转换为字符串
看个复杂点的
// `||` 右侧的 x 自动转换为字符