From 8851011df44de111ffadaa938f426e0bbe691f86 Mon Sep 17 00:00:00 2001 From: tangxin <617054137@qq.com> Date: Wed, 6 Dec 2023 17:22:18 +0800 Subject: [PATCH] =?UTF-8?q?FieldWrapper=20=E5=A4=84=E7=90=86=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E4=BF=AE=E5=A4=8Dentity=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=B6=E5=A6=82=E6=9C=89=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=B1=BB=E4=BC=BCMap>?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisflex/core/util/FieldWrapper.java | 7 ++- .../coretest/FieldWrapperTest.java | 63 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 mybatis-flex-core/src/test/java/com/mybatisflex/coretest/FieldWrapperTest.java 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; + } + } + + + +}