2017-01-05 1 views
1

아래에 다음 2 개가 있습니다. methods카운터를 사용하여 순환 종속성 무한 루프를 해결 하시겠습니까?

올바른 사용 예로 cancelChildTree()을 호출하면 removeChildRelationsIfNecessary()이 발생하고 내 코드로 이동합니다.

그러나 데이터베이스의 일부 데이터에는 부모와 자녀 사이에 circular dependency이 있습니다. 이로 인해 두 메서드가 서로를 계속 호출하여 infinite loop에 있습니다.

이 문제를 어떻게 해결할 수 있습니까? 내 계획은 시도하고 추가 counterinfinite 루프가 발생했는지 감지 - 그 특정 부모 자식 관계에 대해 이동하십시오.

방법 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 : 반복적으로 같은 객체에 cancelChildTree(Parent parent)를 호출처럼

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

답변

1

것 같습니다.

만약 그렇다면 무엇이 Set<Parent> 개체를 사용하여 해당 메서드에 제공된 부모 개체를 추적하지 못하도록합니까? 다른 말로하면 : 바보 카운터를 사용하는 대신; 왜 현재 처리중인 객체를 추적하지 않습니까? 처리를 피하기 위해 다시?

+0

내 코드를 업데이트했습니다. 죄송합니다. 이전 버전이었습니다. 잘못된 코드를 복사하여 붙여 넣었습니다. – java123999

+0

내 요점은 당신이 ** 같은 ** 객체에서 항상 그 메소드를 호출하고 있다는 것입니다. 그리고 편집을 보았을 때, 그것은 여전히 ​​그렇게 보입니다. 따라서 나는 당신이 여기서 당신의 의견으로 말하려고하는 것을 얻지 못한다. – GhostCat

관련 문제