gpt4 book ai didi

scala - Scala 特征如何编译成 Java 字节码?

转载 作者:太空宇宙 更新时间:2023-11-04 14:51:10 24 4
gpt4 key购买 nike

我已经使用 Scala 一段时间了,我知道特征可以充当 Scala 中接口(interface)和抽象类的等价物。 Traits 到底是如何编译成 Java 字节码的?

我发现了一些简短的解释,说明特征在可能的情况下与 Java 接口(interface)完全一样地编译,否则与附加类的接口(interface)。然而,我仍然不明白 Scala 如何实现类线性化,这是 Java 中没有的功能。

是否有一个很好的资料来解释 Traits 如何编译为 Java 字节码?

最佳答案

我不是专家,但这是我的理解:

特征被编译成接口(interface)和相应的类。

trait Foo {
def bar = { println("bar!") }
}

相当于...

public interface Foo {
public void bar();
}

public class Foo$class {
public static void bar(Foo self) { println("bar!"); }
}

这就留下了一个问题:Foo$class 中的静态 bar 方法如何被调用?这个魔法是由 Foo 特征混合到的类中的编译器完成的。

class Baz extends Foo

变成类似...

public class Baz implements Foo {
public void bar() { Foo$class.bar(this); }
}

类线性化只是根据语言规范中定义的线性化规则实现适当版本的方法(调用 Xxxx$class 类中的静态方法)。

关于scala - Scala 特征如何编译成 Java 字节码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757785/

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