Java泛型(9):动态类型安全

因为可以向Java SE5之前的代码传递泛型容器,所以旧式代码仍有可能破坏你的容器。Java SE5中有一组便利工具,可以解决这种情况下类型检查的问题。

它们是静态方法checkedCollection(); checkedList(); checkedMap(); checkedSet(); checkedSortedMap(); checkedSortedSet();

这些方法的第一个参数是你希望动态检查的容器,第二个参数是你希望强制要求的类型。当受检查的容器插入不正确的对象时会抛出ClassCastException。

 1 public class Test {
 2     @SuppressWarnings("unchecked")
 3     static void oldStyleMethod(List probablyAppels) {
 4         probablyAppels.add(new Banana());
 5     }
 6     public static void main(String[] args) {
 7         List<Apple> apples1 = new ArrayList<>();
 8         oldStyleMethod(apples1);
 9         List<Apple> apples2 = Collections.checkedList(
10                 new ArrayList<>(), Apple.class);
11         try {
12             oldStyleMethod(apples2);
13         } catch(Exception e) {
14             System.out.println(e);
15             // java.lang.ClassCastException: Attempt to insert class chapter15.class13.Banana element into collection with element type class chapter15.class13.Apple
16         }
17         List<Fruit> pets = Collections.checkedList(
18                 new ArrayList<>(), Fruit.class);
19         pets.add(new Apple());
20         pets.add(new Banana());
21     }
22 }
23 
24 class Fruit {}
25 class Apple extends Fruit {}
26 class Banana extends Fruit {}

 

posted @ 2017-12-27 17:12  Storm_L  阅读(1241)  评论(0编辑  收藏  举报