Collections利用现有容器生成可检查容器checkedCollection、checkedList、checkedSet、checkedMap
Collections可利用现有容器生成检查容器//传入任何Collection子类,返回一个检查Collection对象public static <E> Collection<E> checkedCollection(Collection<E> c,Class<E> type)...
·
- Collections可利用现有容器生成检查容器
//传入任何Collection子类,返回一个检查Collection对象
public static <E> Collection<E> checkedCollection(Collection<E> c,Class<E> type)
//传入ArrayList、LinkedList ,返回检查的List
public static <E> List<E> checkedList(List<E> list, Class<E> type)
//传入HashSet ,返回检查Set
public static <E> Set<E> checkedSet(Set<E> s, Class<E> type)
//传入TreeSet ,返回检查SortedSet
public static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s,Class<E> type)
//传入HashMap ,返回检查Map
public static <K, V> Map<K, V> checkedMap(Map<K, V> m,Class<K> keyType,alueType)
//传入TreeMap ,返回检查SortedMap
public static <K,V> SortedMap<K,V> checkedSortedMap(SortedMap<K, V> m,
Class<K> keyType,Class<V> valueType)
- 返回的检查容器,通过将原容器包装,在对象新增等时,对传入的对象进行类型检查
- 第二参数就是传入参数必须要满足的数据类型
- 可能将错误的类型传入泛型集合中
List<String> list = Arrays.asList("12","23");
List obj = list;
//list中存在了一个非String类型,程序执行到这里不会报错
obj.add(112);
- 解决这样问题的方法是:
List<String> list = Arrays.asList("12", "23");
List<String> safeList = Collections.checkedList(list, String.class);
List obj = safeList;
//检查容器视图受限于虚拟机可运行的运行时检查
obj.add(new Date());//只有执行到这一步才会抛出java.lang.ClassCastException
更多推荐
已为社区贡献15条内容
所有评论(0)