天天看點

java泛型參數_獲得java泛型參數

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;

}