我有一个自定义对象,它有一些“计数器”字段。此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;
}
有更好的方法吗?或者我不需要重载的方式?哦,我做需要主要的方法来保持静态,由于限制我不能轻易改变系统内的其他地方。
答案 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)
...
}