以此作为参数调用父构造函数

时间:2018-11-29 23:30:24

标签: scala

我有一个使用其子类之一作为参数的类。构造该子类时,我希望能够使用this作为该参数的值:

class A(val b: B)

class B extends A(this)

但是,这无法编译

this can be used only in a class, object, or template
[error] class B extends A(this)
[error]                   ^

有什么办法可以解决这个问题?我很确定可以用Java编写这样的模式。

1 个答案:

答案 0 :(得分:2)

我不太确定最后一条声明:

public class MyClass {
    static class A {
        A(B b) {
            System.out.println(b.value);
        }
    }
    static class B extends A {
        String value;;
        B() {
            super(this);
            value = "x";
        }
    }
    public static void main(String args[]) {
        new B();
    }
}

出现以下错误:

/MyClass.java:10: error: cannot reference this before supertype constructor has been called
            super(this);
                  ^

没有充分的理由尝试在构造对象本身之前让this引用转义构造函数的范围。重构它。