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[]都是不合法的。

  • 相关阅读:
    Python菜鸟之路:Python基础-线程、进程、协程
    Python菜鸟之路:Python基础-Socket编程-2
    Python菜鸟之路:Python基础-Socket基础-1
    react-native 使用 antd-mobile-rn UI进行开发app
    Java基础
    Java基础
    Java基础
    Java基础
    Java基础
    Java基础
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4478348.html
Copyright © 2011-2022 走看看