diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/FieldWrapper.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/FieldWrapper.java index ad7d3b6b..4438df55 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/FieldWrapper.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/FieldWrapper.java @@ -105,7 +105,12 @@ public class FieldWrapper { Type genericType = field.getGenericType(); if (genericType instanceof ParameterizedType) { fieldWrapper.keyType = (Class) ((ParameterizedType) genericType).getActualTypeArguments()[0]; - fieldWrapper.mappingType = (Class) ((ParameterizedType) genericType).getActualTypeArguments()[1]; + Type actualTypeArgument = ((ParameterizedType) genericType).getActualTypeArguments()[1]; + if (actualTypeArgument instanceof ParameterizedType) { + fieldWrapper.mappingType = (Class) ((ParameterizedType) actualTypeArgument).getRawType(); + } else { + fieldWrapper.mappingType = (Class) actualTypeArgument; + } } } else { fieldWrapper.mappingType = fieldType; diff --git a/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FieldWrapperTest.java b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FieldWrapperTest.java new file mode 100644 index 00000000..427929f7 --- /dev/null +++ b/mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FieldWrapperTest.java @@ -0,0 +1,63 @@ + + +package com.mybatisflex.coretest; + +import com.mybatisflex.core.util.FieldWrapper; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author tangxin + * @since 2023-12-06 + */ +public class FieldWrapperTest { + public static class Demo { + private Map map1; + private Map> map2 ; + + public Map getMap1() { + return map1; + } + + public void setMap1(Map map1) { + this.map1 = map1; + } + + public Map> getMap2() { + return map2; + } + + public void setMap2(Map> map2) { + this.map2 = map2; + } + + } + @Test + public void test01() { + try { + Map> listMap = new HashMap<>(0); + List list = new ArrayList<>(); + list.add(1L); + list.add(2L); + listMap.put("1", list); + Demo demo = new Demo(); + FieldWrapper fieldWrapper1 = FieldWrapper.of(demo.getClass(), "map1"); + FieldWrapper fieldWrapper2 = FieldWrapper.of(demo.getClass(), "map2"); + fieldWrapper1.set(listMap, demo); + fieldWrapper2.set(listMap, demo); + Map map1 = (Map) fieldWrapper1.get(demo); + Map> map2 = (Map>) fieldWrapper1.get(demo); + System.out.println(map1.get("1")); + System.out.println(map2.get("1").get(0)); + }catch (Exception e){ + assert false; + } + } + + + +}