zoukankan      html  css  js  c++  java
  • 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 {}
  • 相关阅读:
    BLOB
    cesium 检测视图改变的代码
    有关Nodejs的一些插件介绍
    线程基础知识
    进程和线程概念对比
    C#对象与XMl文件之间的相互转换(转)
    简介C#读取XML的方式(转)
    关于c# Debug和Release的区别 (转)
    c++堆和栈(转)
    浅谈C#堆栈与托管堆的工作方式(转)
  • 原文地址:https://www.cnblogs.com/storml/p/8126730.html
Copyright © 2011-2022 走看看