Короче говоря, методы visit
экземпляра GenericVisitorAdapter
могут иметь возвращаемое значение типа R
, а методы VoidVisitorAdapter
- нет.
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
может печатать только имена классов в стандартный вывод, поскольку он не имеет возвращаемого значения. С другой стороны, MyGenericVisitor
может накапливать вложенные имена классов в список, который затем будет возвращен вызывающей стороне.