编程语言
首页 > 编程语言> > Java反射和自动装箱

Java反射和自动装箱

作者:互联网

我正在使用反射设置字段值,但是当我尝试将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);
    }
}

任何线索我怎样才能反思做自动装箱?

解决方法:

对于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,reflection,autoboxing
来源: https://codeday.me/bug/20190703/1365369.html