JavaParser 中 VoidVisitorAdapter 和 GenericVisitorAdapter 之间的功能区别是什么
what is the functional difference between VoidVisitorAdapter and GenericVisitorAdapter in JavaParser
JavaParser 中的 VoidVisitorAdapter 和 GenericVisitorAdapter 在功能上有什么区别。我同时使用两者,但它们似乎提供相同的功能。
简而言之,GenericVisitorAdapter
实例的 visit
方法可以有 return 类型 R
的值,而 VoidVisitorAdapter
的方法可以't.
public class MyVoidVisitor extends VoidVisitorAdapter<Void> {
@Override
public void visit(final ClassOrInterfaceDeclaration n, final Void arg) {
// look into members
super.visit(n, arg);
// print the class name
System.out.println(n.getNameAsString());
}
}
public class MyGenericVisitor extends GenericVisitorAdaptor<List<String>, Void> {
@Override
public List<String> visit(final ClassOrInterfaceDeclaration n, final Void arg) {
// look into members
List<String> nestedClassNames = super.visit(n, arg);
// accumulate the class name
nestedClassNames.add(n.getNameAsString());
return nestedClassNames;
}
}
在上面的示例中,MyVoidVisitor
只能将 class 名称打印到标准输出中,因为它没有 return 值。
另一方面,MyGenericVisitor
可以将嵌套的 class 名称累积到列表中,然后 returned 给调用者。
JavaParser 中的 VoidVisitorAdapter 和 GenericVisitorAdapter 在功能上有什么区别。我同时使用两者,但它们似乎提供相同的功能。
简而言之,GenericVisitorAdapter
实例的 visit
方法可以有 return 类型 R
的值,而 VoidVisitorAdapter
的方法可以't.
public class MyVoidVisitor extends VoidVisitorAdapter<Void> {
@Override
public void visit(final ClassOrInterfaceDeclaration n, final Void arg) {
// look into members
super.visit(n, arg);
// print the class name
System.out.println(n.getNameAsString());
}
}
public class MyGenericVisitor extends GenericVisitorAdaptor<List<String>, Void> {
@Override
public List<String> visit(final ClassOrInterfaceDeclaration n, final Void arg) {
// look into members
List<String> nestedClassNames = super.visit(n, arg);
// accumulate the class name
nestedClassNames.add(n.getNameAsString());
return nestedClassNames;
}
}
在上面的示例中,MyVoidVisitor
只能将 class 名称打印到标准输出中,因为它没有 return 值。
另一方面,MyGenericVisitor
可以将嵌套的 class 名称累积到列表中,然后 returned 给调用者。