只是一个快速的好奇心,我写了这段代码(我知道它的代码很糟糕,我已经替换了它)。它是DocumentTreeNode的toString方法,这意味着它在for循环中被递归调用(就像我说的,坏主意)。有趣的是,当这组儿童空着时它会挂起,有人可以解释为什么会这样吗?
注意:children
是一个TreeSet,在本例中为空
public String toString() {
MoreObjects.ToStringHelper helper =
MoreObjects.toStringHelper(getClass())
.add("parent", this.parent)
.add("key", this.key)
.add("value", this.value);
for (DocumentTreeNode<V> child : children.values()) {
helper = helper.add("child", child);
}
return helper.toString();
}
答案 0 :(得分:2)
您将parent
添加到toString
表示,该表示会调用其toString
。反过来,它在其子节点上调用toString
,每个子节点再次在父节点上调用该方法。你有一个无限循环。
UPD。虽然我希望快速死掉像stackoverflow这样的东西。我建议您在调试器中运行它并逐步执行代码以验证建议的假设。