mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
修复JsonUtil.toBean
泛型数组类型丢失问题(pr#3876@Github)
This commit is contained in:
parent
1c3e8634c8
commit
2046809264
@ -39,7 +39,7 @@ public class ActualTypeMapperPool {
|
|||||||
* @return 泛型对应关系Map
|
* @return 泛型对应关系Map
|
||||||
* @since 5.7.16
|
* @since 5.7.16
|
||||||
*/
|
*/
|
||||||
public static Map<String, Type> getStrKeyMap(Type type){
|
public static Map<String, Type> getStrKeyMap(Type type) {
|
||||||
return Convert.toMap(String.class, Type.class, get(type));
|
return Convert.toMap(String.class, Type.class, get(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,6 +59,14 @@ public class ActualTypeMapperPool {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得泛型变量对应的泛型实际类型,如果此变量没有对应的实际类型,返回null
|
||||||
|
*
|
||||||
|
* @param type 类
|
||||||
|
* @param genericArrayType 泛型数组类型
|
||||||
|
* @return 实际类型,可能为Class等
|
||||||
|
* @since 5.8.37
|
||||||
|
*/
|
||||||
public static Type getActualType(Type type, GenericArrayType genericArrayType) {
|
public static Type getActualType(Type type, GenericArrayType genericArrayType) {
|
||||||
final Map<Type, Type> typeTypeMap = get(type);
|
final Map<Type, Type> typeTypeMap = get(type);
|
||||||
Type actualType = typeTypeMap.get(genericArrayType);
|
Type actualType = typeTypeMap.get(genericArrayType);
|
||||||
@ -112,7 +120,7 @@ public class ActualTypeMapperPool {
|
|||||||
// 如果传入的非Class,例如TypeReference,获取到泛型参数中实际的泛型对象类,继续按照类处理
|
// 如果传入的非Class,例如TypeReference,获取到泛型参数中实际的泛型对象类,继续按照类处理
|
||||||
while (null != type) {
|
while (null != type) {
|
||||||
final ParameterizedType parameterizedType = TypeUtil.toParameterizedType(type);
|
final ParameterizedType parameterizedType = TypeUtil.toParameterizedType(type);
|
||||||
if(null == parameterizedType){
|
if (null == parameterizedType) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
final Type[] typeArguments = parameterizedType.getActualTypeArguments();
|
final Type[] typeArguments = parameterizedType.getActualTypeArguments();
|
||||||
@ -123,7 +131,7 @@ public class ActualTypeMapperPool {
|
|||||||
for (int i = 0; i < typeParameters.length; i++) {
|
for (int i = 0; i < typeParameters.length; i++) {
|
||||||
value = typeArguments[i];
|
value = typeArguments[i];
|
||||||
// 跳过泛型变量对应泛型变量的情况
|
// 跳过泛型变量对应泛型变量的情况
|
||||||
if(false == value instanceof TypeVariable){
|
if (false == value instanceof TypeVariable) {
|
||||||
typeMap.put(typeParameters[i], value);
|
typeMap.put(typeParameters[i], value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -408,7 +408,11 @@ public class TypeUtil {
|
|||||||
return ActualTypeMapperPool.getActualType(type, (TypeVariable<?>) typeVariable);
|
return ActualTypeMapperPool.getActualType(type, (TypeVariable<?>) typeVariable);
|
||||||
}
|
}
|
||||||
if (typeVariable instanceof GenericArrayType) {
|
if (typeVariable instanceof GenericArrayType) {
|
||||||
return ActualTypeMapperPool.getActualType(type, (GenericArrayType) typeVariable);
|
//return ActualTypeMapperPool.getActualType(type, (GenericArrayType) typeVariable);
|
||||||
|
final Type actualType = ActualTypeMapperPool.getActualType(type, (GenericArrayType) typeVariable);
|
||||||
|
if(null != actualType){
|
||||||
|
return actualType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 没有需要替换的泛型变量,原样输出
|
// 没有需要替换的泛型变量,原样输出
|
||||||
|
Loading…
x
Reference in New Issue
Block a user