我有以下方法执行树遍历并执行一些操作:
public int method(){
int retVal;
Tree t;
//initialization of t
t.accept(() -> ++retVal)); //error, variable is not
//effectively final
return retVal;
}
,其中
public interface Visitor{
public void visitNode();
}
public interface Tree{
/**
* Traverses this tree and perform some action in each node
*/
public void accept(Visitor v);
//other methods omitted
}
有没有办法解决这个问题?
答案 0 :(得分:5)
没有任何不涉及传入对象而不是局部变量的内容。但是,您可以执行以下任何操作:
AtomicInteger
int[1]
int
移动为实例字段答案 1 :(得分:4)
我建议创建一个可以命名,可以命名的类。
public final class CountVisitor implements Visitor {
private int count;
@Override
public void visitNode() {
this.count++;
}
public int getCount() {
return this.count;
}
}
然后像这样使用它:
public int method(){
CountVisitor counter;
Tree t;
t.accept(counter);
return counter.getCount();
}
如前所述,它是可重复使用的,名称有助于记录目的。