动态类型安全

用一个原生的引用一个具体泛型类型容器对象,往往可以添加别的对象,当从其容器取出元素强转时,才抛出其异常,不好发现问题的所在,这是你可以用Collections的一系类工具(checkedCollection(),checkedList(),checkedMap()等),来检查容器,让你在插入类型不正确对象情况下通过其运行时抛出ClassCastException异常来知道问题所在。
代码例子:

public class Pet extends Individual {
  public Pet(String name) { super(name); }
  public Pet() { super(); }
} 
public class Dog extends Pet {
  public Dog(String name) { super(name); }
  public Dog() { super(); }
}
public class Cat extends Pet {
  public Cat(String name) { super(name); }
  public Cat() { super(); }
}
public class CheckedList {
  @SuppressWarnings("unchecked")
  static void oldStyleMethod(List probablyDogs) {
    probablyDogs.add(new Cat());
  } 
  public static void main(String[] args) {
    List<Dog> dogs1 = new ArrayList<Dog>();
    //编译和运行都会通过
    oldStyleMethod(dogs1); 
    List<Dog> dogs2 = Collections.checkedList(
      new ArrayList<Dog>(), Dog.class);
    try {
    //会抛出异常
      oldStyleMethod(dogs2);
    } catch(Exception e) {
      System.out.println(e);
    }  
     //安全编译通过
      List<Pet> pets = Collections.checkedList(
      new ArrayList<Pet>(), Pet.class);
    pets.add(new Dog());
    pets.add(new Cat());
  }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值