java 动态类型安全

        动态类型安全主要是在泛型容器中遇到的。因为可以向JAVA EE5 之前的代码传递泛型容器,所以旧式代码仍旧有可能会破坏你的容器,JAVA EE5的java.util.Collections中有一组便利工具,可以解决在这种情况下的类型检查问题,它们是:静态方法checkedCollection()、checkedList()、checkedMap()、checkedSet()、checkedSortedMap()和checkedSortedSet()。这些方法每一个都会将你希望动态检查的容器当作第一个参数接受,并将你希望强制要求的类型作为第二个参数接受。

        受检查的容器在你视图插入类型不正确的对象时会抛出ClassCastException异常,而不是在你将对象从容器中取出时才会通知你出现了问题。

Java代码   收藏代码
  1. public class CheckedList{
  2.    @SuppressWarnings("unchecked")
  3.    static void oldStyleMethod(List probablyDogs){
  4.        probablyDogs.add(new Cat());
  5.    }
  6.     public static void main(String[] args){
  7.         List<Dog> dogs1 = new ArrayList<Dog>();
  8.         oldStyleMethod(dogs1);
  9.         List<Dog> dogs2 = Collections.checkedList(
  10.            new ArrayList<Dog>(),Dog.class);
  11.         try{
  12.            oldStyleMethod(dogs2);
  13.         }catch(Exception e){
  14.            e.printStack();
  15.         }
  16.         List<Pet> pets = Collections.checkedList(new ArrayList<Pet>(),Pet.class);
  17.         pets.add(new Dog());
  18.         pets.add(new Cat());
  19.     }
  20. } 


运行这个程序时,你会发现插入一个Cat对于dogs1来说没有任何问题,而dogs2立即会在这个错误类型的插入操作上抛出一个异常。还可以看到,将子类的对象放置到将要检查基类型的受检查容器是没有问题的。
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值