从文档中,我知道AnyKotlin中的类是:
Kotlin 类层次结构的根。每个 Kotlin 类都有 [Any] 作为超类。
它看起来像Object在 Java 中,文档说:
类对象是类层次结构的根。每个类都有一个 Object 作为超类。所有对象,包括数组,都实现了这个类的方法。
我知道底层Any将是Object:我使用带有“反编译”选项的屏幕。所以我真的不明白,如果Any是Object最后,为什么Any只有三种方法,什么时候Object有这么多?
这样做的原因是什么?
中的许多方法java.lang.Object,特别是wait和notify线程原语(几乎完全被更高级别的线程工具,例如java.util.concurrent和 Kotlin 协程取代)以及受保护clone方法的存在,被 Java 的原始设计者认为是设计错误和其他人一样。
一些参考:
Cloneable和Object.clone())Kotlin 设计者决定不将这些错误传播到其顶级类型中。
另外,随着扩展函数的存在,很容易“扩展”Any到你自己的项目可能需要的额外的顶级功能——例如,我的大部分项目都包含这两种方法,它们可以让一个人做流利强制转换而不是括号样式的强制转换:
inline fun <reified T> Any.cast() = this as T
inline fun <reified T> Any.safeCast() = this as? T
Run Code Online (Sandbox Code Playgroud)
最后,虽然 Kotlin 的主要运行时是 JVM(以及类似 JVM 的运行时,如 Android),它将 KotlinAny的Object类型表示为 JVM 的类型,但 Kotlin 确实支持编译到其他后端,例如 JavaScript 和本机代码。鉴于此,语言的顶级类型尽可能精简更有意义。
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |