Java - 从匿名类访问本地变量

时间:2015-06-30 08:08:38

标签: java

found = true;

中的问题
public boolean containsBlock(String nodeName, ASTNode node)
{
    boolean found = false;
    if(nodeName.equals("if"))
    {
        node.accept(new ASTVisitor()
        {
            public boolean visit(IfStatement s)
            {
                found = true;
                return false;
            }
        });
    }
    return found;
}

我知道如果我将found作为一个类全局变量,我将能够访问它,但我不想这样做。也许有另一种方式?我只需要让其他代码知道发现了什么

UPD: 该代码是否更好并将返回正确的

public boolean containsBlock(Text nodeName, ASTNode node)
{
    final AtomicBoolean flag = new AtomicBoolean(false);
    Thread thread = new Thread(new Runnable()
    {
        @Override
        public void run()
        {
            if(nodeName.matches("if"))
            {
                node.accept(new ASTVisitor()
                {
                    public boolean visit(IfStatement s)
                    {
                        flag.set(true);
                        return false;
                    }
                });
            }
            else
                throw new RuntimeException("Unknown NodeName: " + nodeName);
        }
    });
    thread.start();
    try {
        thread.join();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return flag.get();
}

1 个答案:

答案 0 :(得分:3)

当您将ASTVisitor实例传递给ASTNode实例(使用accept方法)时,它不会立即执行您的visit方法。因此,没有必要尝试从containsBlock方法中更改visit方法的局部变量。

visit很可能在您的containsBlock方法返回后执行,此时您的本地found变量将不再位于调用堆栈中。