gpt4 book ai didi

java - 用反射在类中设置一个值,在方法中以类、字段和值作为参数

转载 作者:行者123 更新时间:2023-11-30 07:12:49 25 4
gpt4 key购买 nike

我有这个方法应该将给定类中的字段设置为指定值:

public void setValue(Class<?> instance, String fieldName, Object value) {
try {
Field field = instance.getDeclaredField(fieldName);

field.setAccessible(true);
field.set(instance, value);
} catch (NoSuchFieldException e) {
if (instance.getSuperclass() != null) {
setValue(instance.getSuperclass(), fieldName, value);
} else {
try {
throw new NoSuchFieldException("Could not find field " + fieldName + " in any class.");
} catch (NoSuchFieldException ex) {
ex.printStackTrace();
e.printStackTrace();
}
}
} catch (SecurityException | IllegalArgumentException | IllegalAccessException exx) {
exx.printStackTrace();
}
}

但是,当我尝试设置任何字段时出现此错误:

java.lang.IllegalArgumentException: Can not set float field net.minecraft.server.v1_6_R2.Packet43SetExperience.a to java.lang.Class

我试过使用对象(而不是类),但它从未找到我需要的字段,它只能找到对象类具有的字段。我也尝试过使用泛型,但同样的事情发生了。

最佳答案

你需要有对象的实际实例到pass in to the set method , 而不是 Class对象本身。向您的方法添加一个参数以获取实际实例:

public void setValue(Class<?> clazz, Object instance, String fieldName, Object value) {

我重命名了 Class<?>参数clazz为了清楚起见,因此需要在其他地方进行更改:

Field field = clazz.getDeclaredField(fieldName);

并将实际实例传递给set :

field.set(instance, value);

关于java - 用反射在类中设置一个值,在方法中以类、字段和值作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013155/

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