From 8ff1368f3081347c132dd11e4137909b4b81db32 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 12 Nov 2022 19:46:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBeanUtil.copyProperties=20?= =?UTF-8?q?=E5=8C=85=E5=90=ABEnumSet=20=EF=BC=8C=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +- .../cn/hutool/core/collection/CollUtil.java | 49 +++++++------------ .../hutool/core/exceptions/ExceptionUtil.java | 2 +- .../cn/hutool/core/bean/BeanUtilTest.java | 10 ++-- 4 files changed, 27 insertions(+), 37 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25f1f3d23..340bc4417 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.8.10.M1 (2022-11-11) +# 5.8.10.M1 (2022-11-12) ### 🐣新特性 * 【http 】 HttpResponse增加getFileNameFromDisposition方法(pr#2676@Github) @@ -25,6 +25,7 @@ * 【core 】 修复 BeanUtil#copyProperties 源对象与目标对象都是 Map 时设置忽略属性无效问题(pr#2698@Github) * 【core 】 修复ChineseDate传入农历日期非闰月时获取公历错误问题(issue#I5YB1A@Gitee) * 【core 】 修复key为弱引用 value为强引用 会导致key无法被回收 弱引用失效问题(pr#2723@Github) +* 【core 】 修复BeanUtil.copyProperties 包含EnumSet ,类型转换异常问题(pr#2684@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.9 (2022-10-22) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index 6b6a10139..614841689 100755 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -7,6 +7,7 @@ import cn.hutool.core.comparator.PropertyComparator; import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.ConverterRegistry; import cn.hutool.core.exceptions.UtilException; +import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Editor; import cn.hutool.core.lang.Filter; import cn.hutool.core.lang.Matcher; @@ -964,7 +965,7 @@ public class CollUtil { * @since 3.3.0 */ public static BlockingQueue newBlockingQueue(int capacity, boolean isLinked) { - BlockingQueue queue; + final BlockingQueue queue; if (isLinked) { queue = new LinkedBlockingDeque<>(capacity); } else { @@ -973,6 +974,18 @@ public class CollUtil { return queue; } + /** + * 创建新的集合对象 + * + * @param 集合类型 + * @param collectionType 集合类型 + * @return 集合类型对应的实例 + * @since 3.0.8 + */ + public static Collection create(Class collectionType) { + return create(collectionType, null); + } + /** * 创建新的集合对象,返回具体的泛型集合 * @@ -982,8 +995,8 @@ public class CollUtil { * @since v5 */ @SuppressWarnings({"unchecked", "rawtypes"}) - private static Collection doCreate(Class collectionType, Class elementType) { - Collection list; + public static Collection create(Class collectionType, Class elementType) { + final Collection list; if (collectionType.isAssignableFrom(AbstractCollection.class)) { // 抽象集合默认使用ArrayList list = new ArrayList<>(); @@ -1003,7 +1016,7 @@ public class CollUtil { return CompareUtil.compare(o1.toString(), o2.toString()); }); } else if (collectionType.isAssignableFrom(EnumSet.class)) { - list = (Collection) EnumSet.noneOf((Class) elementType); + list = (Collection) EnumSet.noneOf(Assert.notNull((Class) elementType)); } // List @@ -1017,7 +1030,7 @@ public class CollUtil { else { try { list = (Collection) ReflectUtil.newInstance(collectionType); - } catch (Exception e) { + } catch (final Exception e) { // 无法创建当前类型的对象,尝试创建父类型对象 final Class superclass = collectionType.getSuperclass(); if (null != superclass && collectionType != superclass) { @@ -1029,32 +1042,6 @@ public class CollUtil { return list; } - /** - * 创建新的集合对象,返回具体的泛型集合 - * - * @param 集合元素类型 - * @param collectionType 集合类型,rawtype 如 ArrayList.class, EnumSet.class ... - * @return 集合类型对应的实例 - * @since v5 - */ - @SuppressWarnings({"unchecked", "rawtypes"}) - public static Collection create(Class collectionType, Class elementType) { - return doCreate(collectionType, elementType); - } - - /** - * 创建新的集合对象 - * - * @param 集合类型 - * @param collectionType 集合类型 - * @return 集合类型对应的实例 - * @since 3.0.8 - */ - @SuppressWarnings({"unchecked", "rawtypes"}) - public static Collection create(Class collectionType) { - return doCreate(collectionType, null); - } - /** * 去重集合 * diff --git a/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java b/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java index 5e845cf49..73f4903fb 100644 --- a/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/exceptions/ExceptionUtil.java @@ -233,7 +233,7 @@ public class ExceptionUtil { * 堆栈转为完整字符串 * * @param throwable 异常对象 - * @param limit 限制最大长度,>0表示不限制长度 + * @param limit 限制最大长度,<0表示不限制长度 * @param replaceCharToStrMap 替换字符为指定字符串 * @return 堆栈转为的字符串 */ diff --git a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java index 8d01e5d13..f79d72d96 100755 --- a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java @@ -653,16 +653,18 @@ public class BeanUtilTest { @Test public void beanWithEnumSetTest() { - Vto v1 = new Vto(); + final Vto v1 = new Vto(); v1.setVersions(EnumSet.allOf(Version.class)); - System.out.println(BeanUtil.copyProperties(v1, Vto.class)); + final Vto v2 = BeanUtil.copyProperties(v1, Vto.class); + Assert.assertNotNull(v2); + Assert.assertNotNull(v2.getVersions()); } @Test public void enumSetTest() { final Collection objects = CollUtil.create(EnumSet.class, Version.class); - System.out.println(objects.getClass()); - System.out.println(objects); + Assert.assertNotNull(objects); + Assert.assertTrue(EnumSet.class.isAssignableFrom(objects.getClass())); } static class Station extends Tree {}