public class Person {
}
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Student extends Person {
public static void main(String[] args) {
Student st=new Student();
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.Person
com.test.Person
class com.test.Student
getGenericInterfaces
傳回表示由此對象表示的類或接口直接實作的接口的{@codeType}。
private static Class> getDataType(Class> dataClass)
{
Type[] interfaceTypes = dataClass.getGenericInterfaces();
for (Type interfaceType : interfaceTypes) {
if ((interfaceType instanceof ParameterizedType))
{
ParameterizedType parameterizedType = (ParameterizedType)interfaceType;
if (parameterizedType.getRawType() == DataRepository.class)
{
Type[] typeArguments = parameterizedType.getActualTypeArguments();
return (Class)typeArguments[0];
}
}
}
return null;
}