Как я могу правильно вызвать конструктор в этом случае? - PullRequest
2 голосов
/ 31 мая 2019

Я пытаюсь вызвать конструктор, правильно работающий с 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 ]

2 голосов
/ 31 мая 2019

Конечно.

public class B {

    private final A a;

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

Причина, по которой вы не работаете, заключается в том, что инициализаторы при объявлении выполняются перед конструкторами.

1 голос
/ 31 мая 2019

Здесь:

private final C c = new C(a);

Там вы можете избежать этого "конфликта" порядка, просто назначив c также в своем конструкторе:

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

Конечно, когда вы можете определить свои поля прямо в объявлении, это значительно упрощает.Но иногда этого нельзя избежать в конструкторе.

0 голосов
/ 31 мая 2019

Инициализировать значение в 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)
    }
}
...