gpt4 book ai didi

Scala 的类层次结构

转载 作者:行者123 更新时间:2023-12-04 16:42:38 26 4
gpt4 key购买 nike

关于 Scala 的类层次结构的问题:

  • 在 IntelliJ IDE 中,我正在寻找 Any 的实现和 AnyRef ,但他们不在那里。
    它们在哪里定义,我如何才能看到它们的代码?
  • 我在“Scala 编程”中阅读了以下内容

  • The only case where == does not directly call equals is for Java's boxed numeric classes, such as Integer or Long. In Java, a new Integer(1) does not equal a new Long(1) even though for primitive values 1 == 1L. Since Scala is a more regular language than Java, it was necessary to correct this discrepancy by special-casing the == method for these classes.



    嗯...但不是 ==最终的?他们是如何为 Java 的数字类制作特例的?

    最佳答案

    Any , AnyRef , Null , 和 Nothing实际上并不存在;包括它们是为了使类型系统完整,但它们没有真正的表示。您可以找到 a reference in Scala's repository ,但正如它所说,这些实际上并没有编译和存在,仅用于文档和引导目的。斯卡拉的 3 Any* s其实都是java.lang.Object在编译的字节码中。

    此外,原始值类( IntLong 等)都定义为 final abstract ,这意味着它们实际上也不存在。他们所有的方法都是抽象的。

    为了使一切看起来整洁,更重要的是,为了工作,编译器的工作是伪造这些类型的存在并执行魔术以使其全部粘在一起。这就是允许 ==做空检查并正确处理值类型,即使它是 final ,因为编译器正在围绕它做魔术。在new java.lang.Integer(5) == new java.lang.Long(5)的情况下,归结为 scala.runtime.BoxesRuntime.equalsNumNum(new java.lang.Integer(5), new java.lang.Long(5)) .

    关于Scala 的类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521638/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com