在閱讀本文之前可以先閱讀以下三篇澈侠,以便對(duì)Java中的泛型有一個(gè)全局的認(rèn)識(shí):
簡(jiǎn)介
GenericDeclaration接口繼承了AnnotatedElement接口鹿霸,是所有“可以聲明(定義)范型變量”的實(shí)體(如Class闲先,Constructor采蚀,Method)的公共接口。也就是說(shuō)只有實(shí)現(xiàn)了這個(gè)接口的才能在對(duì)應(yīng)“實(shí)體”上聲明“范型變量”毡熏。所謂范型變量就是<E extends List>或者<E>, 也就是TypeVariable<D extends GenericDeclaration>這個(gè)接口對(duì)應(yīng)的對(duì)象瑰谜,TypeVariable<D extends GenericDeclaration>中的D是繼承自 GenericDeclaration的锌历,用來(lái)通過(guò)范型變量(TypeVariable)反向獲取擁有這個(gè)變量的GenericDeclaration趟卸。
目前實(shí)現(xiàn)GenericDeclaration接口的類包括Class(類), Method(方法), Constructor(構(gòu)造器),也就是說(shuō)只能在這幾種對(duì)象上進(jìn)行范型變量的聲明(定義)蹄葱。GenericDeclaration的直接實(shí)現(xiàn)子類沒有Field類氏义,所以屬性上面不能定義類型變量。GenericDeclaration的接口方法getTypeParameters用來(lái)逐個(gè)獲取該GenericDeclaration的“范型變量”聲明图云。
TypeVariable<?>[] getTypeParameters()
獲取當(dāng)前“實(shí)體”上聲明的“泛型變量"惯悠。
按被聲明的順序返回一個(gè)TypeVariable對(duì)象的數(shù)組,其中TypeVariable對(duì)象是由GenericDeclaration對(duì)象進(jìn)行聲明的竣况。如果底層沒有使用GenericDeclaration聲明“范型變量”克婶,那么返回一個(gè)長(zhǎng)度為0的數(shù)組。
下面是一個(gè)例子:
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());
}
}
}
//輸出結(jié)果
K
V