package com.zk.demo.test;
public class Person<T> {
}
创建一个子类用于继承父类
package com.zk.demo.test;
public class Student extends Person<String> {
}
1.使用Java原声的方式获取
package com.zk.demo.test;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class TestMain {
public static void main(String[] args) {
// 获取继承父类的泛型类型
ParameterizedType parameterizedType = (ParameterizedType)Student.class.getGenericSuperclass();
System.out.println(parameterizedType);
Type type = parameterizedType.getActualTypeArguments()[0];
System.out.println(type);
}
}
2.使用Spring提供的ResolvableType类进行获取
package com.zk.demo.test;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class TestMain {
public static void main(String[] args) {
// 获取继承父类的泛型类型
ResolvableType resolvableType = ResolvableType.forClass(Student.class);
System.out.println(resolvableType);
System.out.println(resolvableType.getSuperType());
System.out.println(resolvableType.getSuperType().getGeneric(0).resolve());
}
}
使用ResolvableType类得到字段级别的信息
public class GenericClass {
private Person<String> persons;
private List<String> listString;
private Map<String, Long> maps;
private List<List<String>> listlist;
}
测试类
获取字段对象中泛型
public class Test2Main {
public static void main(String[] args) {
Field field = ReflectionUtils.findField(GenericClass.class, "persons");
ResolvableType resolvableType = ResolvableType.forField(field);
System.out.println(resolvableType);
System.out.println(resolvableType.getGeneric(0).resolve());
}
}
获取list中的泛型
public class Test2Main {
public static void main(String[] args) {
Field field = ReflectionUtils.findField(GenericClass.class, "listString");
ResolvableType resolvableType = ResolvableType.forField(field);
System.out.println(resolvableType);
System.out.println(resolvableType.getGeneric(0, 0).resolve());
}
}
获取map中的泛型
public class Test2Main {
public static void main(String[] args) {
Field field = ReflectionUtils.findField(GenericClass.class, "maps");
ResolvableType resolvableType = ResolvableType.forField(field);
System.out.println(resolvableType);
System.out.println(resolvableType.getGeneric(0).resolve());
System.out.println(resolvableType.getGeneric(1).resolve());
}
}
获取list中放list
public class Test2Main {
public static void main(String[] args) {
Field field = ReflectionUtils.findField(GenericClass.class, "listlist");
ResolvableType resolvableType = ResolvableType.forField(field);
System.out.println(resolvableType);
System.out.println(resolvableType.getGeneric(0).getGeneric(0).resolve());
}
}