私信发送成功
Watch Star Fork

Looly / hutoolJavaApache-2.0GVP

已关闭
#IGXNI 版本:3.2.3 : MapConverter.convert(Object value, T defaultValue) 存在 Bug!

ItBayMax  创建于

MapConverter.convert(Object value, T defaultValue) 存在 Bug: AbstractConverter.convert(Object value, T defaultValue)

@Test
    public void testGetTypeArgument(){
        Console.log("MapConverter-Class:{}", new MapConverter(HashMap.class).getClass());
        //MapConverter 定义是 extends AbstractConverter<Map<?, ?>>, 其实 (java.util.Map<?, ?> instanceof Class) == false
        Type argumentType = TypeUtil.getTypeArgument(new MapConverter(HashMap.class).getClass(), 0);
        Console.log("MapConverter-Class-instanceof Class:{}", null != argumentType && argumentType instanceof Class);
        Console.log("MapConverter-Class-ByClassUtil:{}", ClassUtil.getTypeArgument(new MapConverter(HashMap.class).getClass()));
        //当为MapConverter时候,ConverterRegistry.convert(...)调用的是AbstractConverter.convert(Object value, T defaultValue)
        //AbstractConverter.convert(Object value, T defaultValue)中需要获取getTargetType(),实则是调用了ClassUtil.getTypeArgument(this.getClass());
        //从而导致convert(Object value, T defaultValue)方法抛异常:[type] and [defaultValue] are both null for Converter [{}], we can not know what type to convert !
        //直接导致MapConverter 不能由普通的Java Bean转换成Map, 即 MapConverter.convertInternal(Object value)永远访问不到
    }

执行结果:

MapConverter-Class:class com.xiaoleilu.hutool.convert.impl.MapConverter
MapConverter-Class-instanceof Class:false
MapConverter-Class-ByClassUtil:null
1463_loolly 396436_itbaymax 共2人参与
展开详细操作日志 收起操作日志
Looly 关闭了 任务 2017-12-21 00:12
Looly 添加了标签 bug 2017-12-21 00:10
ItBayMax 创建了 任务 2017-12-20 23:33

评论 (1)

1463_loolly
Looly 2017-12-21 00:12 拥有者

确认bug,而且同时还存在两个问题:

Bean转Map不成功,MapConverter未加入Convert序列。感谢意见。3.3.0中会修复。

登录 后才可以发表评论

负责人
标签
bug
里程碑
关联分支
开始时间
未设置
结束时间
未设置
置顶选项
优先级
6_float_left_people 6_float_left_close