Добавление конечных детей «автоматически» внутри объекта - PullRequest
0 голосов
/ 05 июля 2018

Я хочу построить структуру данных 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, ...

Надеюсь, моя проблема описана четко.

Большое спасибо за каждую помощь!

...