在这种情况下,如何正确调用构造函数?

时间:2019-05-31 19:06:27

标签: java constructor field

我试图正确地调用一个构造函数来处理3个不同的类,但是我做不到

public class B {

private final A a;

public B(A a) {
     this.a = a;
}
private final C c = new C(a);
}

我有一个错误“变量a可能尚未初始化”,我知道一种方法,可以在B构造函数中放置第二个参数,然后在主类B中调用它,但是还有其他方法吗? >

3 个答案:

答案 0 :(得分:2)

好的。

public class B {

    private final A a;

    public B(A a) {
        this.a = a;
        c = new C(a);
    }
    private final C c;
}

您不起作用的原因是声明时的初始化程序要在构造函数之前执行。

答案 1 :(得分:1)

这里:

private final C c = new C(a);

只需在构造函数中分配c ,就可以避免顺序的“冲突”:

public B(A a) {
     this.a = a;
     this.c = new C(a);
}

当然,当您可以在声明处定义字段时,这将大大简化。但是有时候,无法避免在构造函数中这样做。

答案 2 :(得分:0)

初始化ctor中的值

public class B {
    private final A a;
    private final C c;

    public B(final A a) {
         this.a = a;
         this.c = new C(a)
    }
}