Передайте @interface в класс 'data', затем отобразите поле 'getName ()' - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть такой класс:

class Data<T extends Annotation> {
    public Data(T annotation) {
        for (Field f : annotation.getClass().getFields()) {
            ...println(f.getName());
        }
    }
}

Я пытаюсь передать ему @interface.Ради примера, скажем, мой интерфейс выглядит следующим образом:

@Retention(..RUNTIME)
@interface foo {
    int bar() default 0;
}

Это класс, который будет иметь аннотацию:

@foo(bar = 15) // bar is now 15
public class someClass {
    public Data<foo> d = new Data<foo>(getClass().getAnnotation(foo.class)); // should pass the 15 along as well
}

Кажется, проблема в annotation.getClass ().getFields ().Он не вернет никаких допустимых полей, которые затем не будут зациклены, что не выведет имена.Я пытаюсь получить доступ к полям неправильно?Я не вижу никаких других опций внутри T, которые могли бы позволить мне захватывать поля, так что может быть не так?

1 Ответ

0 голосов
/ 27 ноября 2018

Я обнаружил, что получаю неправильный доступ.Похоже, что @interfaces рассматривают свои значения как методы, а именно объявленные методы.Таким образом, чтобы получить к ним доступ, нужно выполнить итерацию annotation.annotationType().getDeclaredMethods() вместо

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