-2
ちょっと好奇心が強い、私はこのコードを書きました(私はそれが悪いコードであることを知っています、私は以来それを置き換えています)。 DocumentTreeNodeのtoStringメソッドです。これはforループで再帰的に呼び出されたことを意味します(私が言ったように、悪い考えです)。面白いことに、子供のセットが空になったときに掛かっていたのですが、誰もその理由を説明できますか?空リスト上のループがハングアップするのはなぜですか?
注:children
あなたは、そのtoString
を呼び出しtoString
表現にparent
を追加
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();
}
*本当に*空であれば、それは起こりません。強化されたforループは、 'children.values()。iterator()。hasNext()'が直ちにfalseであることを見つけるでしょう。私は実際には 'toString()'メソッドへの意図しない再帰呼び出しであることを期待します。つまり 'this.parent'、' this.key'、 'this.value'は' this'です。 –
長さが0の配列に対する拡張された 'for'ループまたは空の' Iterable'はハングしません。コントロールはループ本体のゼロ反復を実行して通過します。 –
実際、私はそれが再帰的呼び出しではないと思います - それは 'StackOverflowError'で合理的にすばやく失敗するでしょう。 –