val obj: Any = "The quick brown fox jumped over a lazy dog" if(obj is String) { // The variable obj is automatically cast to a String in this scope. // No Explicit Casting needed. println("Found a String of length ${obj.length}") }
1 2 3 4 5 6
Objectobj="The quick brown fox jumped over a lazy dog"; if(obj instanceof String) { // Explicit Casting to `String` Stringstr= (String) obj; System.out.println("Found a String of length " + str.length()); }
除了这么用之外,kotlin 还可以和 when 结合
1 2 3 4 5 6 7 8
for(value in mixedTypeList) { when(value) { is String -> println("String: '$value' of length ${value.length} ") isInt -> println("Integer: $value") isDouble -> println("Double: $value with Ceil value ${Math.ceil(value)}") else -> println("Unknown Type") } }
强制类型转换
在 java 里我们可以将对象强制的转换,但是这个行为不一定是安全的,在 kotlin 里也提供了这样的行为关键字 as 我们可以使用如下代码段。
1 2 3 4 5
val obj: Any = "The quick brown fox jumped over a lazy dog" val str: String = obj as String println(str.length)
val str: String = obj as String //会抛出运行时 ClassCastException
但是kotlin 提供了 安全的转换尝试 可以使用 as? 进行转换
1 2 3
val obj: Any = 123 val str: String? = obj as? String println(str) // 这里会是 null 对象