Предположим, у меня есть следующий базовый класс:
public class RootClass {
private List<RootClass> children = new ArrayList<RootClass>();
public RootClass(RootClass parent) {
if (parent != null) {
parent.addChild(this);
}
}
public void addChild(RootClass child) {
children.add(child);
}
}
И у меня есть следующий дочерний класс:
public class ChildClass extends RootClass {
public ChildClass(RootClass parent) {
super(parent);
doInitialization();
}
private void doInitialization() {
//Might throw an unchecked exception
}
}
Теперь предположим, что я создаю экземпляр ChildClass
, который генерирует исключение, но перехватывается за пределами конструктора (где-то в глубине кода, так далеко, он не знает, что ChildClass
имеет не был полностью построен). Теперь родительский элемент имеет в своем списке children
ссылку на ChildClass
, для которого не был запущен конструктор.
Как следует обращаться с этими ситуациями? Это просто плохая схема дизайна? Или это имеет хоть какой-то смысл? Я не хочу реорганизовывать приложение целиком, чтобы добавить дочерний элемент к родительскому элементу после завершения работы конструктора.