我正在尝试设置子类对象的字段值:
public void setValue(Serializable target, String fieldName, float changer) {
...
//next I'm accessing field "deal" of sub-class "Mon" of class "Hum"
//Hum target
//String upper value is "Mon"
//String fieldName value is "deal"
//float changer is some valid number
Field theField = target.getClass().getDeclaredField(upper).get(target).getClass().getDeclaredField(fieldName);
switch (theField.getType().getName()) {
case "float":
theField.setFloat(target, changer); //the line with error!
break;
case "int":
...
}
代码抛出
IllegalArgumentException: Can not set float field hb.Hum$Mon.deal to hb.Hum
好的,但当我把问题线改为:
theField.setFloat(target.getClass().getDeclaredField(upper).get(target).getClass(), changer)
它扔了NullPointerException
。
我显然搞乱了现场访问,但我无法弄清楚我到底做错了什么。任何人,请指出一个错误吗?
PS
工作代码是(我不应该第二次调用getClass()):
theField.setFloat(target.getClass().getDeclaredField(upper).get(target), changer)
答案 0 :(得分:1)
问题不在于您的代码所做的事情,而在于您如何调用它。您正在为目标传递外部类hb.Hum
的实例,而代码需要嵌套类 hb.Hum.Mon
。
您需要确保在致电setValue
时,第一个参数的类型正确。这将解决问题。