bla*_*ise 5 java reflection autoboxing
我正在使用反射来设置字段值,但是当我尝试将 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);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么线索我如何进行反射来进行自动装箱?
对于一个int字段getType将返回int.class. 自从 Java 引入自动装箱之前就一直是这种情况,因此,正确的是,如果您保持向后兼容性,则在对象类型传递原始类型时 Class.isAssignableFrom(Class)返回。false
或者就像你的情况一样:
int.class.isAssignableFrom(int.class)
Run Code Online (Sandbox Code Playgroud)
将返回true,同时:
int.class.isAssignableFrom(Integer.class)
Run Code Online (Sandbox Code Playgroud)
会回来的false。
快速修复它以编写一个方法,当提供对象类型时,检查该类型和基元或使用 Jakarta Commons 等库中的类(ClassUtils.isAssignable(Class, Class, boolean))。
| 归档时间: |
|
| 查看次数: |
2827 次 |
| 最近记录: |