В чем функциональная разница между VoidVisitorAdapter и GenericVisitorAdapter в JavaParser - PullRequest
0 голосов
/ 06 февраля 2020

В чем функциональная разница между VoidVisitorAdapter и GenericVisitorAdapter в JavaParser. Я использую оба, но они, кажется, предоставляют одинаковую функциональность.

1 Ответ

0 голосов
/ 08 февраля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...