您的位置:首页 > 其它

如何通过反射获取泛型的具体类型

2016-09-21 10:13 253 查看
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
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息