From 31e8ef6306b617f444e6e4b0376b7c69092b9771 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 28 Sep 2019 03:27:08 +0800 Subject: [PATCH] fix mao --- CHANGELOG.md | 2 ++ .../cn/hutool/core/convert/AbstractConverter.java | 3 ++- .../cn/hutool/core/convert/impl/MapConverter.java | 12 +++++++----- .../src/main/java/cn/hutool/core/map/MapUtil.java | 6 +++--- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 903d4fc5f..9ad81cc76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ * 【core】 修复StrBuilder.del无法删除最后一个字符的问题(issue#I12R14@Gitee) * 【core】 修复StrBuilder.del无法删除最后一个字符的问题(issue#I12R14@Gitee) * 【poi】 修复sax方式读取复用行导致的问题(issue#I12O0U@Gitee) +* 【core】 修复ClassUtil循环调用问题 +* 【core】 修复MapConvert转换Bean为Map类型没有转换成功问题 ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java index a947f127d..c3742515f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java @@ -3,6 +3,7 @@ package cn.hutool.core.convert; import java.io.Serializable; import java.util.Map; +import cn.hutool.core.lang.Console; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.ClassUtil; @@ -49,7 +50,7 @@ public abstract class AbstractConverter implements Converter, Serializable if (null == value) { return defaultValue; } - + if (null == defaultValue || targetType.isInstance(defaultValue)) { if (targetType.isInstance(value) && false == Map.class.isAssignableFrom(targetType)) { // 除Map外,已经是目标类型,不需要转换(Map类型涉及参数类型,需要单独转换) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java index 6bf3fe362..231e0ad0f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/MapConverter.java @@ -1,9 +1,5 @@ package cn.hutool.core.convert.impl; -import java.lang.reflect.Type; -import java.util.Map; -import java.util.Map.Entry; - import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.convert.ConverterRegistry; @@ -11,6 +7,10 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.TypeUtil; +import java.lang.reflect.Type; +import java.util.Map; +import java.util.Map.Entry; + /** * {@link Map} 转换器 * @@ -52,7 +52,7 @@ public class MapConverter extends AbstractConverter> { @Override @SuppressWarnings({ "rawtypes", "unchecked" }) protected Map convertInternal(Object value) { - final Map map; + Map map; if (value instanceof Map) { final Type[] typeArguments = TypeUtil.getTypeArguments(value.getClass()); if (null != typeArguments // @@ -66,6 +66,8 @@ public class MapConverter extends AbstractConverter> { convertMapToMap((Map) value, map); } else if (BeanUtil.isBean(value.getClass())) { map = BeanUtil.beanToMap(value); + // 二次转换,转换键值类型 + map = convertInternal(map); } else { throw new UnsupportedOperationException(StrUtil.format("Unsupport toMap value type: {}", value.getClass().getName())); } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java index fb1197711..b39c666a7 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java @@ -82,7 +82,7 @@ public class MapUtil { * @return HashMap对象 */ public static HashMap newHashMap() { - return new HashMap(); + return new HashMap<>(); } /** @@ -400,7 +400,7 @@ public class MapUtil { return resultList; } - boolean isEnd = true;// 是否结束。标准是元素列表已耗尽 + boolean isEnd;// 是否结束。标准是元素列表已耗尽 int index = 0;// 值索引 Map map; do { @@ -736,7 +736,7 @@ public class MapUtil { * @since 4.5.4 */ public static MapWrapper wrap(Map map) { - return new MapWrapper(map); + return new MapWrapper<>(map); } // ----------------------------------------------------------------------------------------------- builder