JavaParser访问方法arg参数说明

时间:2014-10-11 00:15:39

标签: java javaparser

有人可以让我澄清一下arg方法的第二个参数visit的用法,如JavaParser documentation example page中的以下代码所示?

我无法在互联网上找到任何信息。

public class MethodPrinter {

    public static void main(String[] args) throws Exception {
        // creates an input stream for the file to be parsed
        FileInputStream in = new FileInputStream("test.java");

        CompilationUnit cu;
        try {
            // parse the file
            cu = JavaParser.parse(in);
        } finally {
            in.close();
        }

        // visit and print the methods names
        new MethodVisitor().visit(cu, null);
    }

    /**
     * Simple visitor implementation for visiting MethodDeclaration nodes. 
     */
    private static class MethodVisitor extends VoidVisitorAdapter {

        @Override
        public void visit(MethodDeclaration n, Object arg) {
            // here you can access the attributes of the method.
            // this method will be called for all methods in this 
            // CompilationUnit, including inner class methods
            System.out.println(n.getName());
        }
    }
}

1 个答案:

答案 0 :(得分:4)

这很简单。

当您向访问者调用accept方法时,您可以提供此附加参数,然后将其传递回访问者的visit方法。这基本上是一种将一些上下文对象传递给访问者的方式,允许访问者自己保持无状态。

例如,考虑一下您希望收集访问时看到的所有方法名称的情况。您可以提供Set<String>作为参数,并为该集添加方法名称。我想这是它背后的基本原理。 (我个人更喜欢有状态的访客)。

顺便说一下,你通常应该打电话

cu.accept(new MethodVisitor(), null);

不是相反。