You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用Java反射获取的类型进行类型转换并赋值?

解决反射赋值时的类型匹配问题

你的代码报错核心原因是直接把字符串"1"强制转换为int类型,Java不允许这种跨类型的强制转换。要实现根据字段类型匹配赋值,需要先判断字段的具体类型,再针对性赋予对应类型的值。

修改后的可运行代码示例:

@Test
public void reflectionsTest3() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
    Class<Dto> dtoClass = Dto.class;
    Dto dto = dtoClass.getDeclaredConstructor().newInstance();
    Field[] fields = dtoClass.getDeclaredFields();
    
    Arrays.stream(fields).forEach(field -> {
        field.setAccessible(true);
        Class<?> fieldType = field.getType();
        
        try {
            if (fieldType == String.class) {
                field.set(dto, "1");
            } else if (fieldType == int.class || fieldType == Integer.class) {
                field.set(dto, 1);
            }
            // 可按需扩展其他类型处理,比如long、boolean、double等
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    });
}

关键细节说明:

  • 通过field.getType()获取字段的Class类型,直接对比Class对象判断类型(基本类型用int.class,对应包装类用Integer.class)
  • 针对不同类型分支处理:String类型赋值字符串"1",int/Integer类型赋值整数1,保证类型匹配
  • 把field.set()包裹在try-catch中,处理Lambda表达式无法直接抛出的检查型异常

如果需要支持更多数据类型,只需添加对应的判断分支即可。比如处理double类型:

else if (fieldType == double.class || fieldType == Double.class) {
    field.set(dto, 1.0);
}

内容的提问来源于stack exchange,提问作者Henry C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:50:03