反射獲取泛型真實型別
阿新 • • 發佈:2019-01-30
<pre name="code" class="java">public class Animal<T> { } import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class Cat extends Animal<Cat> { public static void main(String[] args) { Cat st=new Cat(); Class clazz=st.getClass(); //getSuperclass()獲得該類的父類 System.out.println(clazz.getSuperclass()); //getGenericSuperclass()獲得帶有泛型的父類 //Type是 Java 程式語言中所有型別的公共高階介面。它們包括原始型別、引數化型別、陣列型別、型別變數和基本型別。 Type type=clazz.getGenericSuperclass(); System.out.println(type); //ParameterizedType引數化型別,即泛型 ParameterizedType p=(ParameterizedType)type; //getActualTypeArguments獲取引數化型別的陣列,泛型可能有多個 Class c=(Class) p.getActualTypeArguments()[0]; System.out.println(c); } } 列印結果: class com.test.Animal com.test.Animal<com.test.Cat> class com.test.Cat