AST:访问和使用查询方法之间的区别是什么?

时间:2016-04-20 09:00:30

标签: java abstract-syntax-tree eclipse-jdt

例如,我从ASTParser获得了一个CompilationUnit。为什么我需要接受访问者而不是使用常规方法:

ASTParser parser ... //all that stuff

CompilationUnit unit = (CompilationUnit) parser.createAST(null);
然后我做了:

unit.types() //get all type declarations

从这里开始我只是继续沿着AST直到叶子节点就像那样没有使用访问。使用访客模式而不是我提出的建议有什么好处?

1 个答案:

答案 0 :(得分:0)

访问者(ASTVisitor的子类型)的目的是遍历整个AST,因此您可以轻松地检查每个AST节点(除非访问方法返回false,此时子树下面的子树)跳过当前节点。)

直接查询AST时,您负责遍历所有有趣的节点。

使用unit.types()时,您只能获得顶级类型声明,但使用访问者可以轻松处理编译单元中的所有类型,包括嵌套类型。

正确实施时,两种方法都应表现出相同的行为。因此,差异在于需要编写的代码量和代码的清晰度(受过训练的眼睛会立即了解访问者的使用情况,但需要仔细阅读手动遍历)。