通过java类的反射机制获取类的属性类型

来源:互联网 发布:知乎 发哥 编辑:程序博客网 时间:2024/06/05 19:19
import java.lang.reflect.Field;import java.lang.reflect.Method;

Class<?> cls=Class.forName(className);//通过类的名称反射类//Class<?> cls = Object.getClass();Field field = cls.getDeclaredField("name");//根据属性名称获取单个属性if (field.getGenericType().toString().equals("int")||field.getGenericType().toString().equals("class java.lang.Integer")){System.out.println("Integer type");}
//下面是获取所有属性(取自网络,仅供参考)
for (Field field : fields) {// --for() begin    System.out.println(field.getGenericType());//打印该类的所有属性类型    // 如果类型是String    if (field.getGenericType().toString().equals(      "class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名     // 拿到该属性的gettet方法          Method m = (Method) object.getClass().getMethod(       "get" + getMethodName(field.getName()));     String val = (String) m.invoke(object);// 调用getter方法获取属性值     if (val != null) {      System.out.println("String type:" + val);     }    }    // 如果类型是Integer    if (field.getGenericType().toString().equals(      "class java.lang.Integer")) {     Method m = (Method) object.getClass().getMethod(       "get" + getMethodName(field.getName()));     Integer val = (Integer) m.invoke(object);     if (val != null) {      System.out.println("Integer type:" + val);     }    }    // 如果类型是Double    if (field.getGenericType().toString().equals(      "class java.lang.Double")) {     Method m = (Method) object.getClass().getMethod(       "get" + getMethodName(field.getName()));     Double val = (Double) m.invoke(object);     if (val != null) {      System.out.println("Double type:" + val);     }    }    // 如果类型是Boolean 是封装类    if (field.getGenericType().toString().equals(      "class java.lang.Boolean")) {     Method m = (Method) object.getClass().getMethod(       field.getName());     Boolean val = (Boolean) m.invoke(object);     if (val != null) {      System.out.println("Boolean type:" + val);     }    }    // 如果类型是boolean 基本数据类型不一样 这里有点说名如果定义名是 isXXX的 那就全都是isXXX的    // 反射找不到getter的具体名    if (field.getGenericType().toString().equals("boolean")) {     Method m = (Method) object.getClass().getMethod(       field.getName());     Boolean val = (Boolean) m.invoke(object);     if (val != null) {      System.out.println("boolean type:" + val);     }    }    // 如果类型是Date    if (field.getGenericType().toString().equals(      "class java.util.Date")) {     Method m = (Method) object.getClass().getMethod(       "get" + getMethodName(field.getName()));     Date val = (Date) m.invoke(object);     if (val != null) {      System.out.println("Date type:" + val);     }    }    // 如果类型是Short    if (field.getGenericType().toString().equals(      "class java.lang.Short")) {     Method m = (Method) object.getClass().getMethod(       "get" + getMethodName(field.getName()));     Short val = (Short) m.invoke(object);     if (val != null) {      System.out.println("Short type:" + val);     }    }    // 如果还需要其他的类型请自己做扩展   }//for() --end

0 0