【问题标题】:why does functions in Any class in kotlin have no body?为什么 kotlin 的 Any 类中的函数没有主体?
【发布时间】:2021-10-16 20:53:47
【问题描述】:

我正在学习 Any 类的 equals 函数。我用intellij查看了Any的equals函数的代码,详细了解了Any类的equals函数。但是,没有 equals 函数的主体,甚至没有将 equals 函数声明为抽象的。但它编译,我想知道为什么。为什么?

【问题讨论】:

  • 这是一个特例。该类不是从该代码编译的,因为编译器对其进行唯一处理。与所有数字类相同。
  • 我不明白你在说什么。请详细说明。
  • 编译器不会将该文件编译为源代码。 Any 不同于任何其他类。每个其他类都是 Any 的子类。 Any 不能是其自身的子类,因此它与任何其他类完全不同,并且没有任何源代码具有有意义的语法。
  • 我现在明白了,谢谢
  • @Tenfour04 java的Objectsource,为什么不能Any?,不是语法问题

标签: function kotlin any


【解决方案1】:

(复制自 Kotlin 讨论网站上的 my answer。)

简短的回答:这很复杂。

(当然,这是对几乎所有问题的有效答案,但在这里尤其如此!)

答案稍长:

应该很明显,Any 类不是从该代码编译而来的。这只是定义了它在其他 Kotlin 代码中的显示方式;这是一种存根实现。

相反,Any 是一个mapped type,由相关平台提供。在 JVM 上,它映射到 java.lang.Object(它本身部分由本机代码实现,并非全部用 Java 编写,您可以从 its source 的一个版本中看到)。

因此,在 JVM 的情况下,实际实现有效地分为存根 Kotlin 源代码、部分 Kotlin 编译器、存根 Java 源代码和部分 Java 运行时。在其他平台上,情况会有所不同。

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多