2013-02-20 3 views
0

일부 "카운터"필드가있는 사용자 지정 개체가 있습니다. 이 객체는 재귀 적으로 호출 될 함수 내에서 필드를 증가시킵니다. 그래서 함수가 호출 될 때마다 새로 만들어 져서 카운터 필드가 리셋되도록 객체가 필요하지만, 함수가 재귀 호출에 있다면 새로 생성되지 않습니다. 이해가 되니?재귀 호출 전체에서 참조 유지

현재이 방법은 오버플로하여 참재귀가 아니며 카운터 대신 동일한 개체를 전달하므로 카운트가 유지됩니다.

기본적으로 다음과 같은 것을 내가 지금 뭘하는지입니다 :이 할 수있는 더 좋은 방법이

static Counter count(Object parent) 
{ 
    Counter newCounter = new Counter(); 
    newCounter = count(parent, newCounter); 

    return newCounter; 
} 

static Counter count(Object parent, Counter currentCounter) 
{ 
    Object cur = new Object(parent); 

    if(cur.isChild()) 
     Counter.child++; 
    else if(cur.isParent()) 
    { 
     Counter.parent++; 
     count(cur, currentCounter); 
    } 

    return currentCounter; 
} 

있습니까? 또는 과부하가 필요하지 않은 방법? 아, 그리고 내가 내가 쉽게 시스템 내에서 다른 곳으로 변경할 수없는 감금으로 인해 정적을 유지하는 주요 방법이 필요합니까.

+0

나사 식 :를

static Counter counter; public static Counter count(Object parent) { counter = new Counter(); count2(parent); return counter; } private static void count2(Object parent) { Object cur = new Object(parent); if(cur.isChild()) Counter.child++; else if(cur.isParent()) { counter.parent++; count2(cur); } } 

또는 멀티 스레딩에 대한

(단일 스레드를 가정)? –

답변

0

정적 변수 사용 :이 코드는

class ThisClass 
{ 
    private Counter counter; 

    private ThisClass() { counter = new Counter(); } 

    public static Counter count(Object parent) 
    { 
    ThisClass thisClass = new ThisClass(); 
    thisClass.count2(parent); 
    return thisClass.counter; 
    } 

    private void count2(Object parent) 
    ... 
} 
+0

이것은 단지 하나의'Thread' 만 있으면 작동합니다. –

+0

@ bmorris591 편집을 참조하십시오. – Dukeling

+0

그래서 어느 쪽의 방법이라도 단 하나의 전체 방법을 사용하여이를 수행 할 방법이없는 것 같습니까? – JToland