Java反射异常:java.lang.NoSuchFieldException 子类找不到父类成员变量

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

当子类通过反射找不到父类的成员变量时候解决办法


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()先获取父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值