Использование процессора аннотаций Java для понимания параметризованных типов параметров метода - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь использовать процессор аннотаций для проверки аннотаций, и как часть этих усилий я пытаюсь выяснить, как использовать API, чтобы определить, является ли Параметр ExecutableElement параметризованным типом (например, List *).1001 *), и если да, то каковы параметризованные типы (Foo).

Есть ли способ сделать это, кроме простого анализа строки, заданной ve.asType (). ToString () гдеVariableElement ve является элементом ExecutableElement e.getParameters ()?Было бы неплохо иметь лучшую обработку этих типов, чем просто строку.

1 Ответ

1 голос
/ 24 апреля 2019

Идея состоит в том, чтобы знать, когда приводить к чему, в вашем случае вам нужно получить аргумент универсального типа, поэтому вам нужно привести к DeclaredType.

например, для метода, подобного следующему

@SampleAnno
public void something(List<String> paramx){

}

код в процессоре, подобном этому

ExecutableElement method = (ExecutableElement) this.sampleElement;

method.getParameters()
        .forEach(parameter -> ((DeclaredType)parameter.asType()).getTypeArguments()
                .forEach(typeMirror -> {
                 messager.printMessage(Diagnostic.Kind.NOTE, "::::::: > [" + typeMirror.toString() + "]");
                }));

должен распечатать Information:java: ::::::: > [java.lang.String]

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