• 泛型擦除


      今天编程,为了适应他人代码的接口规则,需要创建一个map的数组,众所周知,容器不加泛型会出现警告,很自然这样写

    1 Map<String, String> navs[] = new HashMap<String, String>[4];

      结果直接报错,说new数组不能使用泛型。那么代码只好有警告待着了。

      后来发现数组中不能使用容器因为泛型擦除。

     1 // 假设可以创建泛型数组
     2 List<String>[] stringLists = new ArrayList<String>[1];
     3 List<Integer> intList = Arrays.asList(42);
     4 // 泛型擦除,List 继承自 Object,所以可以如此赋值
     5 // 在数组中,子类数组 是 父类数组 的子类,Object[] o = new ArrayList[1];
     6 Object[] objects = stringLists;
     7 // 同理,泛型擦除后,List 类型变量赋值给 Object 类型变量
     8 // 但此时出现问题了,**** List<Integer> 实例添加到了声明为 List<String>[] 类型的数组中了 ******
     9 objects[0] = intList;
    10 String s = stringLists[0].get(0);

      由于泛型擦除,结果就是泛型的检查作用失效,可以将 List<Integer> 类型的值添加到 List<String>[] 类型的数组中。

      而这类问题在编译时无法发现,只能在运行时出现问题

      所以如果禁止创建泛型数组,就可以避免此类问题

  • 相关阅读:
    Android入门:Button
    Android入门:部署时的常见错误
    to be
    Android入门:单元测试
    忘记 MySQL 的 root 帐号密码该怎么办
    Eclipse开发build path中jar包部署到应用中
    报告两个bug
    本站导引
    一个用Word做报表设计的报表系统windwardreports
    智能互联网
  • 原文地址:https://www.cnblogs.com/guanghe/p/9583847.html
Copyright © 2020-2023  润新知