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 cd8dddc7b..6b6a10139 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 @@ -13,41 +13,12 @@ import cn.hutool.core.lang.Matcher; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.lang.hash.Hash32; import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.CharUtil; -import cn.hutool.core.util.ClassUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.TypeUtil; +import cn.hutool.core.util.*; import java.io.Serializable; import java.lang.reflect.Type; -import java.util.AbstractCollection; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Deque; -import java.util.EnumSet; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.NavigableSet; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.SortedSet; -import java.util.Stack; -import java.util.TreeMap; -import java.util.TreeSet; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.CopyOnWriteArrayList; @@ -1003,15 +974,15 @@ public class CollUtil { } /** - * 创建新的集合对象 + * 创建新的集合对象,返回具体的泛型集合 * - * @param 集合类型 - * @param collectionType 集合类型 + * @param 集合元素类型 + * @param collectionType 集合类型,rawtype 如 ArrayList.class, EnumSet.class ... * @return 集合类型对应的实例 - * @since 3.0.8 + * @since v5 */ @SuppressWarnings({"unchecked", "rawtypes"}) - public static Collection create(Class collectionType) { + private static Collection doCreate(Class collectionType, Class elementType) { Collection list; if (collectionType.isAssignableFrom(AbstractCollection.class)) { // 抽象集合默认使用ArrayList @@ -1032,7 +1003,7 @@ public class CollUtil { return CompareUtil.compare(o1.toString(), o2.toString()); }); } else if (collectionType.isAssignableFrom(EnumSet.class)) { - list = (Collection) EnumSet.noneOf((Class) ClassUtil.getTypeArgument(collectionType)); + list = (Collection) EnumSet.noneOf((Class) elementType); } // List @@ -1058,6 +1029,32 @@ 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); + } + /** * 去重集合 * @@ -2098,10 +2095,11 @@ public class CollUtil { * ["456"], "123" -> true * [Animal{"name": "jack"}], Dog{"name": "jack"} -> true * + * * @param collection 被加入的集合 - * @param object 要添加到集合的对象 - * @param 集合元素类型 - * @param 要添加的元素类型【为集合元素类型的类型或子类型】 + * @param object 要添加到集合的对象 + * @param 集合元素类型 + * @param 要添加的元素类型【为集合元素类型的类型或子类型】 * @return 是否添加成功 * @author Cloud-Style */ diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java index 3b78db2c3..2fb1c8b31 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/CollectionConverter.java @@ -72,7 +72,7 @@ public class CollectionConverter implements Converter> { * @return 转换后的集合对象 */ protected Collection convertInternal(Object value) { - final Collection collection = CollUtil.create(TypeUtil.getClass(this.collectionType)); + final Collection collection = CollUtil.create(TypeUtil.getClass(this.collectionType), TypeUtil.getClass(this.elementType)); return CollUtil.addAll(collection, value, this.elementType); } } 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 18a10e332..8d01e5d13 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 @@ -22,14 +22,7 @@ import java.io.Serializable; import java.lang.reflect.Type; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; /** @@ -647,6 +640,31 @@ public class BeanUtilTest { Assert.assertEquals(new Long(123456L), station2.getId()); } + enum Version { + dev, + prod + } + + @Data + public static class Vto { + EnumSet versions; + } + + + @Test + public void beanWithEnumSetTest() { + Vto v1 = new Vto(); + v1.setVersions(EnumSet.allOf(Version.class)); + System.out.println(BeanUtil.copyProperties(v1, Vto.class)); + } + + @Test + public void enumSetTest() { + final Collection objects = CollUtil.create(EnumSet.class, Version.class); + System.out.println(objects.getClass()); + System.out.println(objects); + } + static class Station extends Tree {} static class Tree extends Entity {}