1. 程式人生 > >反射獲取泛型真實型別

反射獲取泛型真實型別

<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