如何将接口作为通用类型传递并将其用作注释?

时间:2018-11-25 20:26:51

标签: java generics annotations

假设我有一个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 :(得分:0)

someClass内,我进行了以下修改:

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

然后,通过传递foo(确保将其保留策略设置为运行时),您可以轻松地从MyClass获取值。

这使gson可以找到值