получить тип целевого элемента пользовательской аннотации - PullRequest
0 голосов
/ 04 октября 2019

У меня есть пользовательская аннотация:

@Target({ElementType.METHOD}) // NOTE: ElementType is METHOD
public @interface MyAnnotation {
}

У меня есть универсальный класс, который принимает универсальный ограниченный тип:

class MyWork<T extends Annotation> {
    T theAnnotation;

    public ElementType checkAnnotationElementType() {
        // how to get the target elementType of theAnnoation?
    }

}

Что я хочу достичь, это получить целевой элементтип T theAnnotation. Например, я хочу достичь конечного результата:

 MyWork<MyAnnotation> foo = new MyWork();
 ElementType type = foo.checkAnnotationElementType(); // returns ElementType.METHOD

Как получить тип элемента из переменной универсального типа theAnnotation?

1 Ответ

1 голос
/ 04 октября 2019

Вы могли бы сделать что-то подобное. Получить аннотацию из аннотации. Обратите внимание, что у аннотации может быть несколько целевых типов.

Примечание. Необходимо как-то создать экземпляр своего поля - конструктор кажется хорошим способом, универсальный можно опустить.

ElementType[] target = new MyWork<>(MyAnnotation.class).checkAnnotationElementType();
class MyWork<T extends Annotation> {

    private final Class<T> annotationClass;

    public MyWork(Class<T> annotationClass) {
        this.annotationClass = annotationClass;
    }

    public ElementType[] checkAnnotationElementType() {
        return annotationClass.getAnnotation(Target.class).value();
    }
}
...