Я хочу построить структуру данных Java с помощью универсального класса Obj с внутренними объектами Obj. Вот пример:
public final Obj x = new Obj() {
public final Obj y = new Obj(3);
public final Obj z = new Obj() {
public final Obj a = new Obj(3);
public final Obj b = new Obj(4);
}
};
Конечно, это работает: я могу использовать переменные x или x.y или x.z.a и т. Д.
Моя проблема в том, что каждый конечный объект имеет фиксированный размер (здесь он задается конструктору как значение int) и индекс внутри верхнего объекта. Родительские объекты имеют размер суммы дочерних элементов:
a and y has size 3
b has size 4
--> z has size 7
... --> x has size 10
y and a have index 0
z and b have index 1
Конечно, я мог бы реализовать это, указав родителю как часть конструктора:
public final Obj x = new Obj() {
public final Obj y = new Obj(x, 3);
public final Obj z = new Obj(x) {
public final Obj a = new Obj(z, 3);
public final Obj b = new Obj(z, 4);
}
};
Но я хочу сделать это "волшебство" - есть ли способ сделать это?
Мне нужна одна из двух вещей:
1) Метод, который запускается после добавления всех внутренних полей (поэтому я могу получить все внутренние объекты по отражению).
2) Или техника, чтобы что-то сказать верхнему объекту (поэтому объект в y говорит объекту в x «Эй, я твой сын!»).
Я попытался использовать блоки инициализации объекта, но все они работают попарно с конструктором: инициализирующие блоки x, затем конструктор x, затем инициализирующие блоки y, ...
Надеюсь, моя проблема описана четко.
Большое спасибо за каждую помощь!