使用 java 8 可以创建带有目标 ElementType.TYPE_USE 的注释。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_USE})
public @interface MyAnnotation {
}
此注解可以应用于传递给通用父类(super class)的类型,例如:
public class ClassA extends BaseClass<@MyAnnotation ClassB,@MyAnnotation ClassC>{
...
}
使用以下代码,我可以轻松地从 ClassA 的实例动态检索父类(super class) BaseClass 的类型参数列表。
ClassA instanceOfA = new ClassA();
...
Class classOfA = instanceOfA.getClass();
ParameterizedType type = (ParameterizedType)classOfA.getGenericSuperclass();
Type[] types = type.getActualTypeArguments();
// types[0] --> ClassB
// types[1] --> ClassC
从那里,我试图找到一种方法来检索每个类型参数的注释,但没有成功。
有没有办法动态地(运行时)检索这些注释?谢谢
编辑: 额外的精度,我想支持以下用例:
public class ClassA extends BaseClass<@Annotation1 ClassB,@Annotation2 ClassC>{
...
}
public class ClassD extends BaseClass<@Annotation3 ClassB,@Annotation4 ClassC>{
...
}
在这个例子中,ClassB 在 ClassA 或 ClassD 的上下文中被不同地注释(对于 ClassC 也是一样)。
最佳答案
棘手的:
import java.lang.reflect.*;
AnnotatedType baseClassAt = classOfA.getAnnotatedSuperclass();
assert (at instanceof AnnotatedParameterizedType);
AnnotatedType[] aTypes = ((AnnotatedParameterizedType)baseClassAt)
.getAnnotatedActualTypeArguments();
assert aTypes.length == 2;
MyAnnotation myAnno0 = aTypes[0].getAnnotation(MyAnnotation.class);
MyAnnotation myAnno1 = aTypes[1].getAnnotation(MyAnnotation.class);
关于java - 如何捕获泛型父类(super class)类型参数的注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32495517/