在整个递归调用中保持引用

时间:2013-02-20 11:43:34

标签: java recursion static

我有一个自定义对象,它有一些“计数器”字段。此Object获取将在递归调用的函数内递增的字段。因此,每次调用函数时都需要重新创建Object,以便重置计数器字段,但如果函数处于递归调用中则不会重新创建。有意义吗?

目前,我是通过重载方法来实现的,这样它不是 true 递归,而是我传递带有计数器的相同Object,以便我的计数保持不变。

基本上,下面的内容就是我现在正在做的事情:

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

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

1 个答案:

答案 0 :(得分: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)
    ...
}