Java 在递归调用中保持引用

Java 在递归调用中保持引用,java,recursion,static,Java,Recursion,Static,我有一个自定义对象,它有一些“计数器”字段。此对象在将被递归调用的函数中递增这些字段。因此,我需要在每次调用函数时重新创建对象,以便重置计数器字段,但如果函数处于递归调用中,则不重新创建。有道理吗 目前,我正在通过重载方法来实现这一点,这样它就不是真正的递归,而是传递带有计数器的同一个对象,以便保留计数 基本上,我现在所做的就是如下所示: static Counter count(Object parent) { Counter newCounter = new Counter();

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

目前,我正在通过重载方法来实现这一点,这样它就不是真正的递归,而是传递带有计数器的同一个对象,以便保留计数

基本上,我现在所做的就是如下所示:

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

有更好的方法吗?或者一种我不需要过载的方式?哦,我确实需要保持静态的主要方法,因为我无法在系统中的其他地方轻松更改限制。

使用静态变量:(假设只有一个线程)

或用于多线程:

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

这段代码是线程化的吗?因此,无论哪种方式,似乎都没有办法只用一个total方法来完成这项工作?@JToland好吧,如果您愿意按如下方式调用它:
count(parent,null)
,您应该能够找出如何将代码修改为单个调用,但就个人而言,我会使用上面的方法之一(私人项目中的顶层,可能是生产代码中的底层(如果必要的话))@Dukeling-好的,很酷。谢谢!如果这是完成类似任务的最佳实践,我很高兴。我只是不知道是否有一种“更递归”的方法来处理我正在做的事情。
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)
    ...
}