Подтвердить что ты не робот

Ссылаясь на "this" при вызове супер-конструктора?

У меня есть класс A и записываю подкласс B. A имеет только один конструктор, который параметризуется. B должен назвать этот супер-конструктор A. Теперь я хочу использовать объект как параметр. Этот объект должен вызывать метод B. Поэтому параметр-объект должен содержать ссылку B или должен быть внутренним классом.

public B(){
   super.(new parameter(this))
}

Теперь, когда я хочу вызвать конструктор, как... Eclipse говорит:

Нельзя ссылаться на 'this' и 'super', явно вызывая конструктор

Единственное, что я вижу, чтобы обойти это, - это set-method, чтобы ввести "this" -instance в объект параметра. Я бы не хотел редактировать суперкласс.

Вы видите лучший способ этого.

4b9b3361

Ответ 1

Компилятор действительно мешает вам стрелять в ногу здесь. B не полностью сконструирован только после вызова супер-конструктора, поэтому, если вы передадите это (если компилятор разрешил его) в качестве ссылки, и он вызывает метод на B, B будет находиться в недопустимом состоянии и будет вызывать все виды от неприятных проблем (на самом деле, A все еще не инициализирован, ни какой-либо класс в цепочке, включая Object).

Очевидное решение состоит в том, чтобы обеспечить функциональность вне B и передать ее конструктору параметра. Конкретные решения будут зависеть от конкретной проблемы, но статический вложенный класс внутри B (он должен быть статичным по той же причине - внутренний класс имеет неявную ссылку на экземпляр внешнего класса) мог бы обеспечить эту функциональность, возможно. Возможно, вам нужно переосмыслить взаимосвязь между параметром B и его суперклассом. Все зависит от случая.