HighlightableStructure

HighlightableStructure

此问题是this question的扩展。

我有一个类似于以下课程。

 class HighlightableStructure {
      private final HighlightableStructure NEXT;

      HighlightableStructure(HighlightableStructure next) {
           NEXT = next;
      }
 }


HighlightableStructure指向要突出显示的下一个结构。

有时,这些HighlightableStructure循环并引用先前的HighlightableStructure,但不是链中的第一个。类似于h_1-> h_2-> h_3-> ...-> h_n-> h_2,其中h_i是HighlightableStructure的实例。

无论如何,我可以构造这样的东西而无需反思或失去不变性吗?

最佳答案

一种可能的解决方案:

class HSequenceBuilder {
    private long id = 0;
    private final Map<Integer, H> map = new HashMap<Integer, H>();

    static H create(int next) {
        H h = new H(id, next, Collections.unmodifiableMap(map));
        map.put(id, h);
        id++;
        return h;
    }

    static H create() {
        create(id + 1);
    }

}

class H {
    private final id;
    private final Map<Integer, H> map;
    private final int next;

    H(int id, int next, Map<Integer, H> map) {
        this.id = id;
        this.next = next;
        this.map = map;
    }

    int getId() { return id; }
}
HSequenceBuilder builer = new HSequenceBuilder();
H h1 = builder.create(); // 1.
H h2 = builder.create(); // 2.
H h3 = builder.create(h2.getId()); // 3.

关于java - 有什么好方法可以使不可变对象(immutable对象)链环回?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57969903/

10-14 10:47