2013-02-20 36 views
0

我有一個具有一些「計數器」字段的自定義對象。這個對象獲得這些字段在遞歸的函數中遞增。所以我需要在每次調用函數時重新創建對象,以便重置計數器字段,但如果函數處於遞歸調用中,則不會重新創建。合理?在遞歸調用中持續參考

目前,我通過重載方法來做到這一點,以便它不是true遞歸,而是我通過與計數器相同的對象,以便我的計數被持久化。

基本上,像下面是我現在在做什麼:

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

此代碼線程? – 2013-02-20 11:48:21

回答

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); 
    } 
} 

或者多線程:

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',它就可以工作。 – 2013-02-20 11:49:32

+0

@ bmorris591請參閱編輯。 – Dukeling 2013-02-20 11:54:38

+0

因此無論哪種方式,似乎沒有辦法使用只有一個總方法來完成此操作? – JToland 2013-02-20 14:45:32