获取几种形式泛型的Class类型:
ClassA类:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class ClassA <T>{
private T obj;
public void setObject(T obj) { this.obj = obj; }
public T getObject() { return obj; }
/**
* 获取T的实际类型
*/
public void testClassA() throws NoSuchFieldException, SecurityException {
System.out.print("getSuperclass:");
System.out.println(this.getClass().getSuperclass().getName());
System.out.print("getGenericSuperclass:");
Type t = this.getClass().getGenericSuperclass();
System.out.println(t);
if (ParameterizedType.class.isAssignableFrom(t.getClass())) {
System.out.print("getActualTypeArguments:");
for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) {
System.out.print(t1 + ",");
}
System.out.println();
}
}
}
Test类:
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import java.lang.reflect.ParameterizedType;
public class Test extends ClassA<String> {
private List<String> list;
private Map<String, Object> map;
/***
* 获取List中的泛型
*/
public static void testList() throws NoSuchFieldException, SecurityException {
Type t = Test.class.getDeclaredField("list").getGenericType();
if (ParameterizedType.class.isAssignableFrom(t.getClass())) {
for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) {
System.out.print(t1 + ",");
}
System.out.println();
}
}
/***
* 获取Map中的泛型
*/
public static void testMap() throws NoSuchFieldException, SecurityException {
Type t = Test.class.getDeclaredField("map").getGenericType();
if (ParameterizedType.class.isAssignableFrom(t.getClass())) {
for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) {
System.out.print(t1 + ",");
}
System.out.println();
}
}
public static void main(String args[]) throws Exception {
System.out.println(">>>>>>>>>>>testList>>>>>>>>>>>");
testList();
System.out.println("<<<<<<<<<<<testList<<<<<<<<<<<\n");
System.out.println(">>>>>>>>>>>testMap>>>>>>>>>>>");
testMap();
System.out.println("<<<<<<<<<<<testMap<<<<<<<<<<<\n");
System.out.println(">>>>>>>>>>>testClassA>>>>>>>>>>>");
new Test().testClassA();
System.out.println("<<<<<<<<<<<testClassA<<<<<<<<<<<");
}
}
结果:
>>>>>>>>>>>testList>>>>>>>>>>>
class java.lang.String,
<<<<<<<<<<<testList<<<<<<<<<<<
>>>>>>>>>>>testMap>>>>>>>>>>>
class java.lang.String,class java.lang.Object,
<<<<<<<<<<<testMap<<<<<<<<<<<
>>>>>>>>>>>testClassA>>>>>>>>>>>
getSuperclass:com.pelin.util.ClassA
getGenericSuperclass:com.pelin.util.ClassA<java.lang.String>
getActualTypeArguments:class java.lang.String,
<<<<<<<<<<<testClassA<<<<<<<<<<<