Scala继承层次结构图:

上图来自《 Scala,为不耐烦的人》一书显示,所有Java类都是AnyRef类的子类。

图8–1显示了Scala类的继承层次结构。与Java中的原始类型相对应的类以及类型Unit扩展了AnyVal。所有其他类都是AnyRef类的子类,它是Java或.NET虚拟机中Object类的同义词。
AnyValAnyRef都扩展了Any类,它是层次结构的根。

在不更改Java类的情况下如何实现的?在字节码级别上需要处理吗?

最佳答案

免责声明:我绝对不是Scala专家,但是拥有20年的Java经验,包括JVM。

我的解释是

所有其他类都是AnyRef类的子类,
Java
或.NET虚拟机中Object类的同义词。

(重点是我的)完美地解释了它。

对于JVM,没有AnyRef类。文本称AnyRef为同义词,而JVM没有这样的概念。因此,可能是Scala编译器将AnyRef替换为java.lang.Object。当然,所有Java类都是java.lang.Object的子类,它在Scala编译器中刚刚获得了一个新名称,因此使它们全部继承自AnyRef(又称为Object)

我敢打赌,您不会在任何Scala运行时JAR库中找到AnyRef.class条目,这意味着对于JVM,不存在像AnyRef这样的类。

07-28 01:42