有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在递归调用中保持引用

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

目前,我正在通过重载该方法来实现这一点,这样它就不是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;
}

有更好的方法吗?或者一种我不需要过载的方式?哦,而且我需要保持静态的主要方法,因为我不能轻易地改变系统中的其他地方


共 (1) 个答案

  1. # 1 楼答案

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

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