Nea*_*roo 0 optimization casting kotlin
今天我在Kotlin Docs中看到了这一部分.Kotlin被称为"聪明的演员阵容",似乎"在需要时自动插入(安全)演员阵容":
在许多情况下,不需要在Kotlin中使用显式强制转换运算符,因为编译器会跟踪对不可变值的is-checks并在需要时自动插入(安全)强制转换:
Run Code Online (Sandbox Code Playgroud)fun demo(x: Any) { if (x is String) { print(x.length) // x is automatically cast to String } }
我不明白这个例子中"智能铸造"的作用.似乎没有什么需要转换,因为它x总是String,因此x.length总是有效,不需要转换.print线路上究竟发生了什么?提前致谢!
x有一个类型Any,该类型没有.length属性.但是,因为在if块内部,它已知x实际上是a String,它会获得类型的智能转换,并且您可以调用方法并访问String该类的属性.
这段代码的Java版本看起来像这样,String即使在进行类型检查之后你也需要一个显式的强制转换:
void demo(Object x) {
if(x instanceof String) {
System.out.print(((String) x).length());
}
}
Run Code Online (Sandbox Code Playgroud)
这就是Kotlin为您简化的内容.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |