gpt4 book ai didi

java - 特征和接口(interface)二进制兼容吗?

转载 作者:行者123 更新时间:2023-11-29 09:59:46 34 4
gpt4 key购买 nike

我对 Scalabinary incompatible 的事实感到有点惊讶跨不同的版本。现在,由于在 Java 8 中,我们有默认方法实现,这与 trait 为我们提供的几乎相同,在 Java 代码中使用 trait 是否安全?我尝试自己使用它:

trait TestTrait {
def method(v : Int)
def concrete(v : Int) = println(v)
}

public class Test implements TestTrait{ // Compile-error. Implement concrete(Int)
@Override
public void method(int v) {
System.out.println(v);
}
}

但是它拒绝编译。编译器提示没有实现 concrete(Int)。虽然我在TestTrait中指定了实现。

最佳答案

当 Scala 2.11 编译器编译特征时,它不会生成带有默认方法的接口(interface),因为生成的代码必须使用 Java 6。在 Scala 2.12(需要 Java 8)中它会,所以如果你编译你的 Scala 代码和 2.12 编译器,我希望你应该能够以这种方式从 Java 使用它(至少对于像这样的简单案例)。

请注意,像这样的更改正是导致不同 Scala 版本二进制不兼容的原因:如果您尝试使用 Scala 2.12 中使用 Scala 2.11 编译的特征,它会尝试调用接口(interface)的默认方法,而这些方法不存在。

关于java - 特征和接口(interface)二进制兼容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119432/

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