获得java泛型参数

创建一个类,业务对象 Persion类;

public class Person<T> {

}

创建继承Persion的Student子类:

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class Student extends Person<Student> {
    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<com.test.Student>
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;
}
欢迎您的到来,感谢您的支持!

为您推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注