• 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
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐