Появилась необходимость получить доступ к this перед вызовом super в конструкторе.
Имеется класс AutoCompleteTextField с конструктором
public AutoCompleteTextField(final String id, final IModel<T> model, final Class<T> type,
final IAutoCompleteRenderer<T> renderer, final AutoCompleteSettings settings)
Я создаю наследника этого класса: DictAutoCompleteTextField
private DictAutoCompleteTextField(String id, String dictName, IModel<Dict> model) {
super(id, model, Dict.class, new AutoCompleteRenderer(), newAutoCompleteSettings());
Мне нужно передать в параметр rendered свою реализацию AutoCompleteRenderer, причём этой реализации нужен доступ к самому наследнику DictAutoCompleteTextField.
Возможности вызвать что-то вроде AutoCompleteTextFieldюsetRenderer нет, поле AutoCompleteTextFieldюrenderer final и инициализируется в конструкторе. Класс AutoCompleteTextField из фреймворка и менять я его тоже не могу. Функции вроде AutoCompleteTextField.getRenderer тоже нет, чтобы вызвать её и инициализировать мой Renderer после вызова super.
Единственное, что приходит в голову — завести статическую ThreadLocal переменную, присваивать ей AutoCompleteRenderer в его конструкторе и доставать его сразу после вызова super. Какой-то костыль. Ну или reflection-ом достать.
Можно ли придумать какой-нибудь синтаксичекий трюк или что-то в этом роде? Самое логичное для меня это код вроде
private DictAutoCompleteTextField(String id, String dictName, IModel<Dict> model) {
AutoCompleteRenderer renderer = new AutoCompleteRenderer();
super(id, model, Dict.class, renderer, newAutoCompleteSettings());
renderer.setOwner(this);
Но по какому-то глупому ограничению я не то, что получить доступ к this до вызова super не могу, я вообще ничего там делать не могу.