此问题是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/