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 cae324ed4..3a80610da 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 @@ -3056,4 +3056,94 @@ public class CollUtil { return IterUtil.isEqualList(list1, list2); } + + /** + * 泛型集合向上转型。例如将Collection<Integer>转换为Collection<Number> + * @param collection 集合 + * @param 泛型 + * @return 泛化集合 + */ + @SuppressWarnings("unchecked") + public static Collection castup(Collection collection){ + return (Collection) collection; + } + + /** + * 泛型集合向下转型。例如将Collection<Number>转换为Collection<Integer> + * @param collection + * @param + * @return + */ + @SuppressWarnings("unchecked") + public static Collection castdown(Collection collection){ + return (Collection) collection; + } + + /** + * 泛型集合向上转型。例如将Set<Integer>转换为Set<Number> + * @param set 集合 + * @param 泛型 + * @return 泛化集合 + */ + @SuppressWarnings("unchecked") + public static Set castup(Set set){ + return (Set) set; + } + + /** + * 泛型集合向下转型。例如将Set<Number>转换为Set<Integer> + * @param set 集合 + * @param 泛型子类 + * @return 泛化集合 + */ + @SuppressWarnings("unchecked") + public static Set castdown(Set set){ + return (Set) set; + } + + /** + * 泛型集合向下转型。例如将Map<Integer, Integer>转换为Map<Number,Number> + * @param map 集合 + * @param 泛型父类 + * @param 泛型父类 + * @return 泛化集合 + */ + @SuppressWarnings("unchecked") + public static Map castup(Map map){ + return (Map) map; + } + + /** + * 泛型集合向下转型。例如将Map<Number,Number>转换为Map<Integer, Integer> + * @param map 集合 + * @param 泛型子类 + * @param 泛型子类 + * @return 泛化集合 + */ + @SuppressWarnings("unchecked") + public static Map castdown(Map map){ + return (Map) map; + } + + /** + * 泛型接口向上转型。例如将List<Integer>转换为List<Number> + * @param list 集合 + * @param 泛型的父类 + * @return 泛化集合 + */ + @SuppressWarnings("unchecked") + public static List castup(List list){ + return (List) list; + } + + /** + * 泛型集合向下转型。例如将List<Number>转换为List<Integer> + * @param list 集合 + * @param 泛型的子类 + * @return 泛化集合 + */ + @SuppressWarnings("unchecked") + public static List castdown(List list){ + return (List) list; + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java index 512b13e2d..50d32c86a 100755 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollUtilTest.java @@ -10,6 +10,7 @@ import lombok.Data; import org.junit.Assert; import org.junit.Test; +import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -908,6 +909,36 @@ public class CollUtilTest { Assert.assertEquals("bb", distinct.get(1).getName()); } + @Test + public void testCastToSuper() { + Collection collection=CollUtil.newLinkedList(1,2,3); + List list = CollUtil.newArrayList(1, 2, 3); + Set set = CollUtil.newHashSet(1, 2, 3); + Map map = new HashMap<>(); + map.put(1, 1); + + Collection collection2 = CollUtil.castup(collection); + Assert.assertSame(collection, collection2); + + Collection collection3 = CollUtil.castdown(collection2); + Assert.assertSame(collection2, collection3); + + List list2 = CollUtil.castup(list); + Assert.assertSame(list, list2); + List list3 = CollUtil.castdown(list2); + Assert.assertSame(list2, list3); + + Set set2 = CollUtil.castup(set); + Assert.assertSame(set, set2); + Set set3 = CollUtil.castdown(set2); + Assert.assertSame(set2, set3); + + Map map2 = CollUtil.castup(map); + Assert.assertSame(map, map2); + Map map3 = CollUtil.castdown(map2); + Assert.assertSame(map2, map3); + } + @Data @AllArgsConstructor static class Person {