Как передать интерфейс в качестве универсального типа и использовать его в качестве аннотации? - PullRequest
0 голосов
/ 25 ноября 2018

Допустим, у меня есть интерфейс аннотации foo

@interface foo {
    String bar();
}

Я хочу иметь возможность передать foo универсальному T в классе, назовем его someClass

class someClass<T> {
    T ourAnnotation = getClass().getAnnotation(T); // this won't work
}

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

@foo(bar = ...)
public class MyClass extends someClass<foo> {
    public MyClass() {
        ourAnnotation.bar // ... do stuff
    }
}

Как бы я мог пройти это?

Редактировать: Я нашел решение

В someClass я сделал следующие изменения:

class someClass<T> {
    final T info;
    public someClass(Class<T> tClass) {
        info = getClass().getAnnotation(tClass);
    }
}

Затем, передав foo (убедитесь, что политика хранения настроена на время выполнения), вы можете легко получить значения из MyClass.

1 Ответ

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

В someClass я внес следующие изменения:

class someClass<T> {
    final T info;
    public someClass(Class<T> tClass) {
        info = getClass().getAnnotation(tClass);
    }
}

Затем, передав foo (убедитесь, что политика хранения настроена на время выполнения), вы можете легко получить значенияот MyClass.

Это позволяет gson найти значения

...