2019-12-11:说说Kotlin中的Any与Java中的Object有何异同?
Moosphan opened this issue · comments
Hulk Su commented
JosnLi commented
首先这个问题很简单,其次我不会 - - , 有请楼下回答
jack-chong commented
名字不一样
qinwenhao commented
Any 比object大,obejct相当于java的object,Any包括Unit,Null这些
乱 commented
同:
- 都是顶级父类
异: - 成员方法不同
Any只声明了toString()、hashCode()和equals()作为成员方法。
我们思考下,为什么 Kotlin 设计了一个 Any ?
当我们需要和 Java 互操作的时候,Kotlin 把 Java 方法参数和返回类型中用到的 Object 类型看作 Any,这个 Any 的设计是 Kotlin 兼容 Java 时的一种权衡设计。
所有 Java 引用类型在 Kotlin 中都表现为平台类型。当在 Kotlin 中处理平台类型的值的时候,它既可以被当做可空类型来处理,也可以被当做非空类型来操作。
试想下,如果所有来自 Java 的值都被看成非空,那么就容易写出比较危险的代码。反之,如果 Java 值都强制当做可空,则会导致大量的 null 检查。综合考量,平台类型是一种折中的设计方案。