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

有一个更好的方法吗?或者我不需要重载的方式?哦,我确实需要保持静态的主要方法,由于限制,我无法轻易更改系统内的其他地方。

4

1 回答 1

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)
    ...
}
于 2013-02-20T11:49:04.173 回答