1、getField是可以获取到父类的共有字段的,而getDeclaredField只能获取本类所有字段
贴代码:
public class Animal {
public String address; //注意此处是 public 公有的。
private String priAddress;
set/get方法。。。
}
public class Dog extends Animal {
private String name;
private Integer age;
set/get方法。。。
}
测试:
public class MainReflection {
public static void main(String[] args) {
try {
Dog d = new Dog();
Field dogField = d.getClass().getField("address");
// getField是可以获取到父类的共有字段的,而getDeclaredField只能获取本类所有字段
dogField = d.getClass().getDeclaredField("address");
dogField.setAccessible(true);
dogField.set(d, "hangzhou");
System.out.println(d.getAddress());
System.out.println("---------------------------------------");
DataDto t = new DataDto();
Field field = t.getClass().getDeclaredField("key1");
field.setAccessible(true);
field.set(t, "10001l");
System.out.println(t.getKey1());
/**
* getDeclaredField是可以获取一个类的所有字段. getField只能获取类的public 字段.
*/
t.getClass().getField("key2");
Method method = t.getClass().getDeclaredMethod("getKey2");
String rs = (String) method.invoke(t);
System.out.println(rs);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}