是否有一种方法/解决方法来增加java8中的int

时间:2016-05-02 17:39:36

标签: java lambda java-8

我有以下方法执行树遍历并执行一些操作:

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
}

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:5)

没有任何不涉及传入对象而不是局部变量的内容。但是,您可以执行以下任何操作:

  1. 使用AtomicInteger
  2. 使用int[1]
  3. (如果适用)将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();
}

如前所述,它是可重复使用的,名称有助于记录目的。