Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019-12-11:说说Kotlin中的Any与Java中的Object有何异同? #209

Open
Moosphan opened this issue Dec 11, 2019 · 4 comments
Open
Labels

Comments

@Moosphan
Copy link
Owner

No description provided.

@Jsondx
Copy link

Jsondx commented Dec 11, 2019

首先这个问题很简单,其次我不会 - - , 有请楼下回答

@jack-chong
Copy link

名字不一样

@424385117
Copy link

Any 比object大,obejct相当于java的object,Any包括Unit,Null这些

@feelschaotic
Copy link

同:

  • 都是顶级父类
    异:
  • 成员方法不同
    Any只声明了toString()、hashCode()和equals()作为成员方法。

我们思考下,为什么 Kotlin 设计了一个 Any ?

当我们需要和 Java 互操作的时候,Kotlin 把 Java 方法参数和返回类型中用到的 Object 类型看作 Any,这个 Any 的设计是 Kotlin 兼容 Java 时的一种权衡设计。

所有 Java 引用类型在 Kotlin 中都表现为平台类型。当在 Kotlin 中处理平台类型的值的时候,它既可以被当做可空类型来处理,也可以被当做非空类型来操作。

试想下,如果所有来自 Java 的值都被看成非空,那么就容易写出比较危险的代码。反之,如果 Java 值都强制当做可空,则会导致大量的 null 检查。综合考量,平台类型是一种折中的设计方案。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants