use*_*882 1 java scala interface traits
我刚刚种的事实,惊讶的Scala是二进制兼容不同发行版本.现在,因为Java 8我们的默认方法实现与traits提供的几乎相同,是否可以安全地在Java代码中使用traits?我试图自己使用它:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但它拒绝编译.编译器抱怨没有变形concrete(Int).虽然我在中指定了实现TestTrait.
当Scala 2.11编译器编译特征时,它不会生成具有默认方法的接口,因为生成的代码必须与Java 6一起使用.在Scala 2.12(需要Java 8)中它将会,因此如果您编译Scala代码使用2.12编译器,我希望您能够以这种方式从Java中使用它(至少对于像这样的简单情况).
请注意,像这样的更改正是使不同的Scala版本二进制文件不兼容的原因:如果您尝试使用Scala 2.12中使用Scala 2.11编译的特征,它将尝试调用接口的默认方法,而不是那里.
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |