gpt4 book ai didi

java - 通过反射设置子类的字段

转载 作者:行者123 更新时间:2023-12-01 09:49:45 25 4
gpt4 key购买 nike

我正在尝试设置子类对象的字段值:

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)

最佳答案

问题不在于你的代码做了什么,而在于你如何调用它。您正在为目标传递外部类 hb.Hum 的实例,而代码需要一个嵌套类 hb.Hum.Mon

您需要确保调用 setValue 时第一个参数的类型正确。这将解决问题。

关于java - 通过反射设置子类的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37676295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com