Looly 6 years ago
parent
commit
31e8ef6306

+ 2 - 0
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类型没有转换成功问题
 
 -------------------------------------------------------------------------------------------------------------
 

+ 2 - 1
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<T> implements Converter<T>, Serializable
 		if (null == value) {
 			return defaultValue;
 		}
-		
+
 		if (null == defaultValue || targetType.isInstance(defaultValue)) {
 			if (targetType.isInstance(value) && false == Map.class.isAssignableFrom(targetType)) {
 				// 除Map外,已经是目标类型,不需要转换(Map类型涉及参数类型,需要单独转换)

+ 7 - 5
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<Map<?, ?>> {
 	@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<Map<?, ?>> {
 			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()));
 		}

+ 3 - 3
hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java

@@ -82,7 +82,7 @@ public class MapUtil {
 	 * @return HashMap对象
 	 */
 	public static <K, V> HashMap<K, V> newHashMap() {
-		return new HashMap<K, V>();
+		return new HashMap<>();
 	}
 
 	/**
@@ -400,7 +400,7 @@ public class MapUtil {
 			return resultList;
 		}
 
-		boolean isEnd = true;// 是否结束。标准是元素列表已耗尽
+		boolean isEnd;// 是否结束。标准是元素列表已耗尽
 		int index = 0;// 值索引
 		Map<K, V> map;
 		do {
@@ -736,7 +736,7 @@ public class MapUtil {
 	 * @since 4.5.4
 	 */
 	public static <K, V> MapWrapper<K, V> wrap(Map<K, V> map) {
-		return new MapWrapper<K, V>(map);
+		return new MapWrapper<>(map);
 	}
 
 	// ----------------------------------------------------------------------------------------------- builder