kotlin中的以下代码:
Any().javaClass
Run Code Online (Sandbox Code Playgroud)
有价值java.lang.Object.这是否意味着Any和Object是同一类?他们的关系是什么?
Mic*_*son 28
没有.
来自Kotlin文档 (强调我的)
Kotlin中的所有类都有一个共同的超类
Any,对于没有声明超类型的类,它是默认的超类:
class Example // Implicitly inherits from Any
Any不是java.lang.Object; 特别是,除了和之外equals(),它没有任何成员.有关更多详细信息,请参阅Java互操作性部分.hashCode()toString()
此外,从映射类型的部分我们发现:
Kotlin专门处理一些Java类型.这些类型不是"按原样"从Java加载的,而是映射到相应的Kotlin类型.映射仅在编译时很重要,运行时表示保持不变.Java的原始类型映射到相应的Kotlin类型(记住平台类型):
...
java.lang.Objectkotlin.Any!
这表示在运行时 java.lang.Object并且kotlin.Any!处理相同.但这!也意味着类型是一种平台类型,这意味着禁用空检查等.
Java中的任何引用都可能为null,这使得Kotlin对严格的null安全性的要求对来自Java的对象不切实际.Java声明的类型在Kotlin中被特别处理并称为平台类型.对这些类型放宽空检查,因此对它们的安全保证与Java相同(见下文).
...
当我们在平台类型的变量上调用方法时,Kotlin在编译时不会发出可空性错误,但是调用可能在运行时失败,因为空指针异常或Kotlin生成的断言以防止空值传播:
| 归档时间: |
|
| 查看次数: |
7769 次 |
| 最近记录: |