没有任何==对象

下面的代码在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中所有类的超类。

  • 在Kotlin中的片段类之间切换
  • 从kotlin的另一个创建集合
  • 即使使用jackson-datatype-jsr310,Instant也不能被序列化为适当的格式
  • Kotlin中的OnclickListener方法之间的区别
  • Kotlin:lambda从不编译
  • android中的setOnLongClickListener和kotlin
  • 使用notify()方法实例化Kotlin类时的LinkageError
  • 使用Kotlin自定义Android视图
  • 在Eclipse Maven项目中使用Kotlin Javascript进行DOM操作
  • Kotlin:Java 8的哪些function尚未支持?
  • Kotlin标准集合库的时间复杂度是否有任何参考?
  • Kotlin language will be the best programming language for Android.