Предупреждение: утечка "this" в конструкторе
Я продолжаю сталкиваться с этим, и у меня возникает неприятное ощущение, что это потому, что мой дизайн неправильный или неоптимальный.
Я понимаю, что это предупреждение привлекает мое внимание к тому факту, что я разрешаю доступ к объекту, который потенциально не полностью инициализирован.
Допустим, мне нужен кадр, который имеет и имеет список (Frame)(Список списка)).В List я могу захотеть сделать что-то, например add ().Чтобы убедиться, что Frame знает как можно меньше о List (только то, что он есть), я бы хотел получить доступ к содержащему Frame из списка (List HAS a Frame?).Это кажется немного глупым, но у меня есть 2+ реализации List, которые будут использовать Frame по-разному.
Чтобы убедиться, что мой код используется правильно, мне понадобится Frame в конструкторе List.Я бы также потребовал List в конструкторе Frame, так как он ДОЛЖЕН иметь один:
public abstract class Frame {
private final List list;
public Frame(List list) {
this.list = list;
list.setFrame(this);
}
}
public abstract class List {
private Frame frame;
protected final void setFrame(Frame frame) {
this.frame = frame;
}
}
Итак, это плохой дизайн, или я действительно должен создать какой-нибудь промежуточный каркас, который это делает, или даже оставитьлеса для пользователя?
Спасибо!