当子类通过反射找不到父类的成员变量时候解决办法
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()先获取父类
本文介绍了解决子类通过反射无法找到父类成员变量的问题。提供了在Java中使用反射机制,当子类B尝试访问父类A的非公共成员field时的正确方法。通过先尝试在子类中获取,若失败则在父类中查找,确保了对父类成员的有效访问。
3685

被折叠的 条评论
为什么被折叠?



