记录:关于java反射的几个方法

Field[] fs = clazz.getDeclaredFields(); // 得到所有的fields  
  
for(Field f : fs)   
{   
    Class fieldClazz = f.getType(); // 得到field的class及类型全路径  
  
    if(fieldClazz.isPrimitive())  continue;  //判断是否为基本类型  
  
    if(fieldClazz.getName().startsWith("java.lang")) continue; //getName()返回field的类型全路径;  
  
    if(fieldClazz.isAssignableFrom(List.class)) 
    {   
             Type fc = f.getGenericType(); // 关键的地方,如果是List类型,得到其Generic的类型    
             
	     if(fc == null) continue;  
  
             if(fc instanceof ParameterizedType) // 如果是泛型参数的类型   
            {   
                   ParameterizedType pt = (ParameterizedType) fc;  
  
                   Class genericClazz = (Class)pt.getActualTypeArguments()[0]; //得到泛型里的class类型对象。 如: List<User> 得到User

             }   
      }   
}  


说明:

isPrimitive:是否是基本数据类型。注意:java的基本数据类型是: boolean、byte、char、short、int、long、float 、double。Boolean,Float...等不是基本数据类型。

isAssignableFrom:是否是同一个父类。AA.class.isAssignableFrom(BB.class) 表示AA是否是BB的父类。

ParameterizedType :参数化类型

getGenericSuperclass, getSuperclass, getActualTypeArguments:getSuperclass获得父类,getGenericSuperclass获得父类,包含泛型参数信息。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值