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