假设我有:
trait A{
println("A")
}
现在我想在我的Java代码中继承这个特性:
class B implements A {}
看起来特征A
的构造函数不会被执行。
是否有可能强制特性A
的构造函数在类B
的范围内执行?
答案 0 :(得分:3)
这将成为:
public interface A {
}
public abstract class A$class {
public static void $init$(A $this) {
Predef..MODULE$.println((Object)"A");
}
}
使用反编译器。 Java说,就是:
public class AImpl implements A {}
public class User {
public User() {
A a = new AImpl();
A$class.$init$(a);
}
}
答案 1 :(得分:3)
获取Java类实现具有构造函数和/或非抽象成员的特征的最合理方法是使用Scala中的类扩展特征,然后在Java中扩展此类:
// AbstractA.scala
abstract class AbstractA extends A
// B.java
class B extends AbstractA
这样,Scala编译器会处理你必须用Java手动完成的所有事情,正如你在bjfletcher的回答中所看到的那样。