关于java反射的几个方法


  1. Field[] fs = clazz.getDeclaredFields(); // 得到所有的fields     
  2.     
  3. for(Field f : fs)     
  4. {     
  5.     Class fieldClazz = f.getType(); // 得到field的class及类型全路径     
  6.     
  7.     if(fieldClazz.isPrimitive())  continue;  //判断是否为基本类型     
  8.     
  9.     if(fieldClazz.getName().startsWith("java.lang")) continue//getName()返回field的类型全路径;     
  10.     
  11.     if(fieldClazz.isAssignableFrom(List.class))   
  12.     {     
  13.              Type fc = f.getGenericType(); // 关键的地方,如果是List类型,得到其Generic的类型       
  14.                
  15.          if(fc == nullcontinue;    
  16.     
  17.              if(fc instanceof ParameterizedType) // 如果是泛型参数的类型      
  18.             {     
  19.                    ParameterizedType pt = (ParameterizedType) fc;    
  20.     
  21.                    Class genericClazz = (Class)pt.getActualTypeArguments()[0]; //得到泛型里的class类型对象。 如: List<User> 得到User   
  22.   
  23.              }     
  24.       }     
  25. }    


说明:

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获得父类,包含泛型参数信息。

你可能感兴趣的:(关于java反射的几个方法)