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 {}
  • 相关阅读:
    Scheduled定时任务的触发规则
    linux设置系统时间为当前网络时间
    idea控制台打印日志出现乱码
    Nginx配置高可用的集群
    Nginx实现负载均衡
    BigDecimal比较大小
    Java调用第三方系统接口获取数据
    sql中主要关键字的执行顺序
    ASP.NET.Core --Jenkins+Docker
    ASP.NET.Core --Swagger+Route
  • 原文地址:https://www.cnblogs.com/storml/p/8126730.html
Copyright © 2011-2022 走看看