is(反义是!is)与自动类型转换
is操作符是用来判断一个对象是否是一个类型的实例
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` is automatically cast to `String` in this branch
return obj.length
}
// `obj` is still of type `Any` outside of the type-checked branch
return null
}
从上面的例子可以看出,经过is进行类型检查以后,就没有必要进行类型转换了,对象会自动转换成被检查的类型。
when——一个更优秀的switch替代品
when结构里的判断项相当的灵活,可以是一个常量,也可以是表达式(函数,类型检查,范围等)。举例说明:
when (x) {
0, 1 -> print("x == 0 or x == 1")
2 -> print("x ==2")
else -> print("otherwise")
}
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
when还可以用作多重if/else选择的替代:
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}