需求:兩個類:A帶泛型參數(shù)T,B繼承A并給出泛型參數(shù)類型,現(xiàn)在想在A中獲取T的Class類型。
public abstract class A<T> {
public A() {
Type genericSuperclass = this.getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
Class tClass = (Class) actualTypeArguments[0];
System.out.println(tClass.getName());
// 用一句話獲取就是下面一行代碼,只是去除了中間變量,可讀性差了些
// Class tCls = (Class) (((ParameterizedType) (this.getClass().getGenericSuperclass())).getActualTypeArguments()[0]);
}
}
public class B extends A<String> {
}
執(zhí)行一下代碼:
public static void main(String[] args){
new B();//控制臺會輸出java.lang.String
}