为什么挂起空列表的循环会挂起?

时间:2016-10-21 21:35:16

标签: java

只是一个快速的好奇心,我写了这段代码(我知道它的代码很糟糕,我已经替换了它)。它是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();
}

1 个答案:

答案 0 :(得分:2)

您将parent添加到toString表示,该表示会调用其toString。反过来,它在其子节点上调用toString,每个子节点再次在父节点上调用该方法。你有一个无限循环。

UPD。虽然我希望快速死掉像stackoverflow这样的东西。我建议您在调试器中运行它并逐步执行代码以验证建议的假设。