[英]AST: what's the difference between visiting and just using query methods?
例如,我从ASTParser获取一个CompilationUnit。 为什么我需要接受访问者而不是使用常规方法:
ASTParser parser ... //all that stuff
CompilationUnit unit = (CompilationUnit) parser.createAST(null);
然后我做:
unit.types() //get all type declarations
从这里开始,我一直沿AST走下去,直到像这样的叶子节点为止,而无需使用访问。 使用访客模式比执行我建议的方法有什么优势?
访客( ASTVisitor
子类型)的目的是遍历整个AST,因此您可以轻松检查每个AST节点(除非visit方法返回false,这时将跳过当前节点下方的子树)。
直接查询AST时,您有责任遍历所有有趣的节点。
使用unit.types()
您只会获得顶级类型声明,但是使用访问器,很容易处理编译单元中的所有类型,包括嵌套类型。
正确实施后,两种方法应表现出相同的行为。 因此,在需要编写的代码数量和代码的清晰度方面存在差异(训练有素的眼睛会立即理解访问者的用法,但需要仔细阅读手动遍历)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.