关于java反射的几个方法


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


说明:

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反射)