在阅读本文之前可以先阅读以下三篇,以便对Java中的泛型有一个全局的认识:
简介
GenericDeclaration接口继承了AnnotatedElement接口,是所有“可以声明(定义)范型变量”的实体(如Class,Constructor,Method)的公共接口。也就是说只有实现了这个接口的才能在对应“实体”上声明“范型变量”。所谓范型变量就是<E extends List>或者<E>, 也就是TypeVariable<D extends GenericDeclaration>这个接口对应的对象,TypeVariable<D extends GenericDeclaration>中的D是继承自 GenericDeclaration的,用来通过范型变量(TypeVariable)反向获取拥有这个变量的GenericDeclaration。
目前实现GenericDeclaration接口的类包括Class(类), Method(方法), Constructor(构造器),也就是说只能在这几种对象上进行范型变量的声明(定义)。GenericDeclaration的直接实现子类没有Field类,所以属性上面不能定义类型变量。GenericDeclaration的接口方法getTypeParameters用来逐个获取该GenericDeclaration的“范型变量”声明。
TypeVariable<?>[] getTypeParameters()
获取当前“实体”上声明的“泛型变量"。
按被声明的顺序返回一个TypeVariable对象的数组,其中TypeVariable对象是由GenericDeclaration对象进行声明的。如果底层没有使用GenericDeclaration声明“范型变量”,那么返回一个长度为0的数组。
下面是一个例子:
public class Main<K extends classA & interfaceB, V> {
classA<K>[][] key;
V value;
public static void main(String[] args) throws Exception{
TypeVariable[] types = Main.class.getTypeParameters();
for(TypeVariable type : types){
System.out.println(type.getName());
}
}
}
//输出结果
K
V