public class User {
public List<User> list= new ArrayList<User>();
public String s = "user";
/**
* 此方法获取泛型字段的具体泛型类型
* 想获取方法的泛型参数类型,可以通过Method的getGenericParameterTypes或者获取返回值的泛型具体类型getGenericRuturnType
* 想获取父类的泛型类型用Class的getGenericSuperClass
* .....
*
* 注意:Type为Class的父类接口
*/
@Test
public void testGeneric() throws Exception{
Field field = User.class.getField("list");
//获取泛型类型(也可以获取到普通类型)
Type type = field.getGenericType(); //java.util.List<com.reflect.User>
/*//获取普通类型
Type type2 = field.getType(); //interface java.util.List*/
//判断是否为type是否为参数化类型,不然强转就会报错
if(type instanceof ParameterizedType){
ParameterizedType pt = (ParameterizedType)type;
Class userClazz = (Class) pt.getActualTypeArguments()[0]; //class com.reflect.User
System.out.println(userClazz.getField("s").get(userClazz.newInstance())); //user
}
}
}
序列化泛型类可能用到
最新推荐文章于 2022-09-04 11:47:43 发布