Re[3]: Получить доступ к this перед вызовом super в конструкторе
От: Pavel Dvorkin Россия  
Дата: 20.07.19 01:44
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Я могу передать this в new AutoCompleteRenderer(). Ну или просто сделать AutoCompleteRenderer не статическим вложенным классом, передав его неявно. Никаких проблем это вызвать не может, т.к. я его в конструкторе использовать не буду. Ну теоретически понятно, что мог бы, и увидел бы инициализированный нулями объект, плохо-плохо, понимаю.


Вот именно. Передан был бы недоконструированный объект с нулевыми полями, и бог знает, что ты с этими полями будешь в new AutoCompleteRenderer делать.Да, передал бы ты туда только this, но дай тебе этот this — и ты там все , что в нем, получишь.

PD>>Передать параметру конструктора ? Чем это будет лучше, чем если сделать это после вызова super ? Завести локальную переменную, как в твоем гипотетическом примере внизу ? Это такой ящик Пандоры открыть, что мало никому не покажется. Кто мне в таком случае запретит передать в new AutoCompleteRenderer() какое-то поле базового класса ?


vsb>Ну я говорю, если уж так не хочется связываться с this, пускай там будет любой код, не трогающий this.


Не трогают this только локальные переменные и формальные параметры (ну и static, конечно). Вот int x = 10; написать там и впрямь было бы можно, и вполне безопасно. А все остальное так или иначе трогает this, в том числе и вложенный нестатический класс. Но было бы странным дать разрешение на введение до super кода, который не может обращаться к полям класса.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.