天天看點

code-Java反射擷取類屬性和方法

public static void reflect(Object e) throws Exception {
  Class<? extends Object> cls = e.getClass();
  Field[] fields = cls.getDeclaredFields();
  for (int i = 0; i < fields.length; i++) {
    Field f = fields[i];
    f.setAccessible(true);
    System.out.println("屬性名:" + f.getName() + " 屬性值:" + f.get(e));
  }
}      
public static void reflectMeth() {
  Person p = new Person();

  Class<? extends Object> clazz = p.getClass();
  try {
    // 調用指定的方法
    /*
     *  Method m = clazz.getDeclaredMethod("getName", String.class);
     *  m.invoke(clazz.newInstance(),"參數");
     */
    // 擷取所有的方法
    Method[] methods = clazz.getDeclaredMethods();
    for (Method method : methods) {
      System.out.println(method.getName());
      method.invoke(p);
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}