我正在使用反射设置字段值,但是当我尝试将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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。