当子类通过反射找不到父类的成员变量时候解决办法
B obj = new B();//B是A的子类,field是A的成员变量
Field fie = obj.getClass().getDeclaredField(field);//这样就报错
//然后改成如下,完美解决
Field fie =null;
try {
fie = obj.getClass().getDeclaredField(field);
} catch (NoSuchFieldException e) {//若是在子类找不到,就去父类找
fie = obj.getClass().getSuperclass().getDeclaredField(field);
}
//若父类中field是public修饰的,可以直接这样获取
Filed fie = obj.getClass().getField(field);
总结:
- Field getField(name):根据字段名获取某个public的field(包括父类)
- Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)
- Field[] getFields():获取所有public的field(包括父类)
- Field[] getDeclaredFields():获取当前类的所有field(不包括父类)
想要获取父类中不是public修饰的字段就得getSuperclass()先获取父类