使用java泛型有时会看到getTypeParameters方法,这个方法是什么意思,下面就来具体了解一下:
官方给出的解释如下:
Returns an array of TypeVariable objects that represent the type variables declared by the generic declaration represented by this GenericDeclaration object, in declaration order. Returns an array of length 0 if the underlying generic declaration declares no type variables.
这官方英文解释写的像狗屎一样,巴拉巴拉写一大堆,表述的很拗口,理解起来费劲
我看了一下,根据我的理解大概意思是返回泛型对象所声明的所有泛型变量的数组,数组元素的排列顺序按照最初声明的顺序。如果基础泛型对象(其实指的就是泛型类/接口)没有声明任何泛型变量,那么数组长度就为0
下面我用人话和代码直观的解释一下:getTypeParameters的含义到底是什么?
首先给出结论:getTypeParameters返回的是泛型类/接口/泛型方法尖括号内声明的泛型变量所组成的数组
千言万语BB不如一句代码直接,下面用代码来证明:
可以看到getTypeParameters返回的是泛型类BaseObj声明的泛型变量[T, U],而且它们在数组中先后顺序跟它们在泛型类中声明的顺序是一致的
仔细一点会看到这个type数组是TypeVariable<Class<BaseObj>>[], 数组的成员变量是TypeVariable<Class<BaseObj>>, 这里的含义是泛型变量TypeVariable的实际载体/持有者是一个Class类,这个类的类型是BaseObj,
再看一个泛型方法的例子:
泛型方法是:
public <B,V extends T> Map<Integer, String>[] genericMethod(Set<T> GenericSet, List<? extends Integer> list1,
List<String> list2, String str1, B[] tArr, V str2) throws IOException, NoSuchMethodException {
return null;
}
看看使用getTypeParameters方法返回的结果:
于是就验证了之前给出的结论:
getTypeParameters返回的是泛型类/接口/泛型方法尖括号里面声明的泛型变量所组成的数组