类型检测与类型转换
is 与 !is 操作符
使用is操作符或其否定形式!is在运行时检测对象是否符合给定类型:
if (obj is String) {
print(obj.length)
}
if (obj !is String) { // 与 !(obj is String) 相同
print("Not a String")
} else {
print(obj.length)
}
智能转换
大多数场景都不需要在 Kotlin 中使用显式转换操作符,因为编译器跟踪不可变值的is-检测以及显式转换,并在必要时自动插入(安全的)转换:
fun demo(x: Any) {
if (x is String) {
print(x.length) // x 自动转换为字符串
}
}
编译器足够聪明,能够知道如果反向检测导致返回那么该转换是安全的:
if (x !is String) return
print(x.length) // x 自动转换为字符串
is 与 !is 操作符
使用is操作符或其否定形式!is在运行时检测对象是否符合给定类型:
if (obj is String) {
print(obj.length)
}
if (obj !is String) { // 与 !(obj is String) 相同
print("Not a String")
} else {
print(obj.length)
}
智能转换
大多数场景都不需要在 Kotlin 中使用显式转换操作符,因为编译器跟踪不可变值的is-检测以及显式转换,并在必要时自动插入(安全的)转换:
fun demo(x: Any) {
if (x is String) {
print(x.length) // x 自动转换为字符串
}
}
编译器足够聪明,能够知道如果反向检测导致返回那么该转换是安全的:
if (x !is String) return
print(x.length) // x 自动转换为字符串