zoukankan      html  css  js  c++  java
  • 第二十五条:泛型集合优先于数组

    数组与泛型集合相比,有两个重要的不同点。

    首先,数组是协变的,相反,泛型则是不可变的。所谓的协变是指:如果Sub类是Super类的子类型,那么数组类型Sub[] 就是Super[]的子类型,也就是

    说可以将Sub[]数组实例赋给Super[]数组类型变量。相反泛型是不可变的,那么List<Sub>与List<Super>则不存在子类型与超类型的关系。也就是说

    不能将ArrayList<Sub>实例赋给ArrayList<Super>类型的变量。

    其次,数组是具体化的。因此数组会在运行时才知道并检查它们的元素类型约束。如果企图将String类型的对象保存在Long数组中,编译时并不会报错。

    但是在运行会抛出ArrayStoreException异常。相比之下,泛型则是通过擦除来实现的。因此泛型只是在编译的时候强化它们的类型信息,并在运行时

    丢弃它们的元素类型信息。擦除就是使泛型可以与没有使用泛型的代码随意进行互用。

    由于上面的根本区别,因此数组和泛型集合不能很好的混合使用。如:new List<E>[] ,new List<String>[],new E[]都是不合法的。

  • 相关阅读:
    javascript 自定义事件
    javascript 实现HashTable(哈希表)
    NHibernate输出SQL语句
    Asp.net MVC Comet推送
    MySQL 数据备份与还原
    Mysql -- 慢查询
    cookie 的HttpOnly 和 Secure 属性
    Ubuntu -- 反射shell nc
    docker 访问宿主机网络
    k8s 配置文件 详解
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4478348.html
Copyright © 2011-2022 走看看