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 给调用者。