如何利用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.
相关产品推荐
相关产品推荐

