Здравствуйте, vsb, Вы писали:
vsb>Я могу передать this в new AutoCompleteRenderer(). Ну или просто сделать AutoCompleteRenderer не статическим вложенным классом, передав его неявно. Никаких проблем это вызвать не может, т.к. я его в конструкторе использовать не буду. Ну теоретически понятно, что мог бы, и увидел бы инициализированный нулями объект, плохо-плохо, понимаю.
Вот именно. Передан был бы недоконструированный объект с нулевыми полями, и бог знает, что ты с этими полями будешь в new AutoCompleteRenderer делать.Да, передал бы ты туда только this, но дай тебе этот this — и ты там все , что в нем, получишь.
PD>>Передать параметру конструктора ? Чем это будет лучше, чем если сделать это после вызова super ? Завести локальную переменную, как в твоем гипотетическом примере внизу ? Это такой ящик Пандоры открыть, что мало никому не покажется. Кто мне в таком случае запретит передать в new AutoCompleteRenderer() какое-то поле базового класса ?
vsb>Ну я говорю, если уж так не хочется связываться с this, пускай там будет любой код, не трогающий this.
Не трогают this только локальные переменные и формальные параметры (ну и static, конечно). Вот int x = 10; написать там и впрямь было бы можно, и вполне безопасно. А все остальное так или иначе трогает this, в том числе и вложенный нестатический класс. Но было бы странным дать разрешение на введение до super кода, который не может обращаться к полям класса.