没有任何==对象

下面的代码在kotlin中:

Any().javaClass 

具有java.lang.Object值。 这是否意味着AnyObject是相同的类? 他们有什么关系?

4 Solutions collect form web for “没有任何==对象”

没有。

从Kotlin文档 (Emphasis我的文档 )

Kotlin中的所有类都有一个公共的超类Any ,这是一个没有声明超types的类的默认超类。

class Example // Implicitly inherits from Any

Any不是java.lang.Object ; 特别是它没有除equals()hashCode()toString()之外的任何成员。 有关更多详细信息,请参阅Java互操作性部分。

此外,从映射types的部分我们发现:

Kotlin专门处理一些Javatypes。 这些types不是从Java“按原样”加载的,而是映射到相应的Kotlintypes。 映射只在编译时很重要,运行时表示保持不变。 Java的原始types被映射到相应的Kotlintypes(记住平台types):

java.lang.Object kotlin.Any!

这表示在运行时 java.lang.Objectkotlin.Any! 被对待是一样的。 但是! 也意味着这个types是一个平台types,这对于禁用空值检查等有其含义。

Java中的任何引用都可能为空,这使得Kotlin对严格的null安全性的要求对于来自Java的对象来说是不切实际的。 Java声明的types在Kotlin中被专门处理,并被称为平台types。 对于这种types,空值检查是放松的,所以它们的安全保证与Java中的相同(参见下面的更多内容)。

当我们在平台types的variables上调用方法时,Kotlin在编译时不会发出可空性错误,但是由于Kotlin生成的空指针exception或断言来阻止空值传播,所以调用在运行时可能会失败:

Kotlin编译器将kotlin.Anyjava.lang.Object视为两种不同的types ,但是在运行时它们使用相同的java.lang.Object 类表示

javaClass属性返回实例的运行时类,这就是为什么在这两种情况下都得到相同的java.lang.Object类。

在编译时也有不同的types,但在运行时是一样的。 它们列在文档的“ 映射types”部分中。

其实在Kotlin lang方面没有java.lang.Object ,所以你一定不能说AnyObject 。 你只能说Any取代Kotlin中的Object

"Any"java.lang.Object的类比:Kotlin中所有类的超类。

  • admob横幅使用太多的内存
  • 如何使用Kotlin何时查找字符串是否为数字?
  • 可以选择Android Studio kotlin版本吗?
  • 从对象中提取文本值以设置listView中的文本
  • 为什么Kotlin中没有并发关键字?
  • 如何将imageview转换为kotlin中的bytearray
  • 什么是TeamCity Kotlin DSL中的Meta Runner的替代品?
  • 用Kotlin编写javascript应用程序
  • 我可以在没有`this`的情况下在自己的class级中应用中缀函数吗?
  • 与新的类Kotlin recyclerView
  • 如何用Kotlin interop强制执行generics
  • Kotlin language will be the best programming language for Android.