diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java index 9b0d6e956..404032245 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java @@ -7,9 +7,11 @@ import cn.hutool.core.lang.Editor; import cn.hutool.core.map.FuncKeyMap; import cn.hutool.core.util.StrUtil; +import java.io.Serializable; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; /** * Bean的值提供者 @@ -47,7 +49,8 @@ public class BeanValueProvider implements ValueProvider { final Map sourcePdMap = BeanUtil.getBeanDesc(source.getClass()).getPropMap(ignoreCase); // issue#2202@Github // 如果用户定义了键编辑器,则提供的map中的数据必须全部转换key - this.sourcePdMap = new FuncKeyMap<>(new HashMap<>(sourcePdMap.size(), 1), (key) -> { + // issue#I5VRHW@Gitee 使Function可以被序列化 + this.sourcePdMap = new FuncKeyMap<>(new HashMap<>(sourcePdMap.size(), 1), (Function & Serializable)(key) -> { if (ignoreCase && key instanceof CharSequence) { key = key.toString().toLowerCase(); } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java b/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java index 4759b7202..fd71a49f2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java @@ -2,8 +2,10 @@ package cn.hutool.core.map; import cn.hutool.core.util.StrUtil; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; /** * 驼峰Key风格的Map
@@ -72,7 +74,8 @@ public class CamelCaseMap extends FuncKeyMap { * @param emptyMapBuilder Map构造器,必须构造空的Map */ CamelCaseMap(MapBuilder emptyMapBuilder) { - super(emptyMapBuilder.build(), (key) -> { + // issue#I5VRHW@Gitee 使Function可以被序列化 + super(emptyMapBuilder.build(), (Function & Serializable)(key) -> { if (key instanceof CharSequence) { key = StrUtil.toCamelCase(key.toString()); } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java b/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java index 40f805ad0..23ff56412 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java @@ -1,7 +1,9 @@ package cn.hutool.core.map; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; /** * 忽略大小写的Map
@@ -72,7 +74,8 @@ public class CaseInsensitiveMap extends FuncKeyMap { * @param emptyMapBuilder 被包装的自定义Map创建器 */ CaseInsensitiveMap(MapBuilder emptyMapBuilder) { - super(emptyMapBuilder.build(), (key)->{ + // issue#I5VRHW@Gitee 使Function可以被序列化 + super(emptyMapBuilder.build(), (Function & Serializable)(key)->{ if (key instanceof CharSequence) { key = key.toString().toLowerCase(); } diff --git a/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java b/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java index 09359517c..9126c2238 100644 --- a/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java @@ -1,10 +1,11 @@ package cn.hutool.core.map; +import cn.hutool.core.util.SerializeUtil; import org.junit.Assert; import org.junit.Test; public class CamelCaseMapTest { - + @Test public void caseInsensitiveMapTest() { CamelCaseMap map = new CamelCaseMap<>(); @@ -12,7 +13,7 @@ public class CamelCaseMapTest { Assert.assertEquals("OK", map.get("customKey")); Assert.assertEquals("OK", map.get("custom_key")); } - + @Test public void caseInsensitiveLinkedMapTest() { CamelCaseLinkedMap map = new CamelCaseLinkedMap<>(); @@ -20,4 +21,18 @@ public class CamelCaseMapTest { Assert.assertEquals("OK", map.get("customKey")); Assert.assertEquals("OK", map.get("custom_key")); } + + @Test + public void serializableKeyFuncTest() { + CamelCaseMap map = new CamelCaseMap<>(); + map.put("serializable_key", "OK"); + CamelCaseMap deSerializableMap = SerializeUtil.deserialize(SerializeUtil.serialize(map)); + Assert.assertEquals("OK", deSerializableMap.get("serializable_key")); + Assert.assertEquals("OK", deSerializableMap.get("serializableKey")); + deSerializableMap.put("serializable_func", "OK"); + Assert.assertEquals("OK", deSerializableMap.get("serializable_func")); + Assert.assertEquals("OK", deSerializableMap.get("serializableFunc")); + } + + }