我正在使用反射来设置字段值,但是当我尝试将 Short 分配给 short 时,我收到错误消息,因为 isAssignable() 返回 false。
private void setFieldValue(Object result, Field curField, Object value) throws NoSuchFieldException, IllegalAccessException {
if (!curField.getType().isAssignableFrom(value.getClass())) {
LOG.error("Can't set field value type mismatch: field class: " + curField.getType().getSimpleName() + ", value class: " + value.getClass().getSimpleName());
} else {
curField.set(result, value);
}
}
有什么线索可以让我反射(reflection)进行自动装箱吗?
最佳答案
对于 int
字段,getType
将返回 int.class
。自从汽车出现之前就是这种情况
装箱被引入到 Java 中,因此,正确地,如果您要保持向后兼容性,Class.isAssignableFrom(Class)
会在对象类型传递给基本类型时返回 false
。
或者按照你的情况:
int.class.isAssignableFrom(int.class)
将返回 true
,同时:
int.class.isAssignableFrom(Integer.class)
将返回 false
。
快速修复它以编写一个方法,当出现对象类型时,检查该类型和原语或使用 Jakarta Commons (ClassUtils.isAssignable(Class, Class, boolean)) 等库中的类。
关于Java反射和自动装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22537869/