2017-01-05 5 views
1

私は以下の2 methodsを持っています。円形の依存関係を無限ループで解く?

正しい使用例では、cancelChildTree()removeChildRelationsIfNecessary()を呼び出してからコードを実行します。

私のデータベースの一部のデータでは、親と子の間にcircular dependencyがあります。これにより、2つのメソッドが互いに呼び出しを続けてinfinite loopになります。

どうすればこの問題を解決できますか?私の計画は、counterを追加して、infiniteループが発生していることを検出してから、その特定の親子関係のために移動します。

方法1:

private void cancelChildTree(Parent parent) { 
    removeChildRelationsIfNecessary(parent); 
    //Note that the 2 methods below never get called if the infinite loop occurs 
    otherMethod(); 
    anotherMethod(); 
} 

方法2:

private void removeChildRelationsIfNecessary(Parent parent) { 
    List<Child> childList = parent.getParentChildRelationship()); 
    for (Child child: childList { 
     cancelChildTree(child); 
    } 
    } 

答えて

1

あなたが繰り返し同じオブジェクトにcancelChildTree(Parent parent)を呼んでいるように見えます。

もしそうなら、そのメソッドに与えられた親オブジェクトを追跡するために、ある種のSet<Parent>オブジェクトを使用できないのはなぜですか?言い換えれば:ダムのカウンターを使う代わりに。なぜ現在処理されているオブジェクトを追跡しないのですか?それらを処理することを避けるため再び

+0

私は自分のコードを更新しました。申し訳ありませんが、古いバージョンです。間違ったものをコピーして貼り付けました。 – java123999

+0

私の主張は、**同じ**オブジェクトでそのメソッドを常に呼び出すことでした。そして、私があなたの編集を見ると、それはまだそうであるようです。だから私はここであなたのコメントであなたが何を言おうとしているのか分からない。 – GhostCat

関連する問題