Java反射和自动装箱

标签 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);
    }
}

有什么线索可以让我反射(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/

相关文章:

c# - 在运行时替换 Property Setter 方法

go - 使用反射获取指向值的指针

java - 错误 : no suitable method found for put(String, int)

Java 整数与字符串自动装箱设计

java - 将文档从一个集合移动到另一个集合会覆盖该文档

java - 服务器遇到意外情况,无法满足请求。 HTTP 500

多线程 Java 代码的 java.util.ConcurrentModificationException

c# - 获取定义方法的类?

java - Integers.add(Value Of(50))列表之间有什么区别?和 Integers.add(50) 列表;在 java

java - java.lang.System.properties 的内容是否随区域设置而变化?