大家好,我是雄雄,今天分享的主题是:java中,不能初始化泛型参数和数组,原文参考自《编写高质量代码 改善java程序的151个建议》,作者,秦少波。
前言
前几天,发过一篇文章,java中的泛型类型是擦除的,有需要的伙伴可以去看看,今天我们就继续延伸一下java中的泛型,在初始化时,不能对泛型参数和数组初始化,但是泛型集合就不一样,下面我们来具体看看。
泛型类型在编译期是擦除的,我们在类初始化时,无法获得泛型的具体参数,比如下面我们看看下面代码:
很显然,t对象和tArray是无法通过编译的。因为编译器在编译时需要获取T类型,但泛型在编译期类型已经被擦除了,所以new T()和new T[5]都会报错,可是为什么new ArrayList<>()不会报错呢?
这是因为ArrayList表面是泛型,其实已经在编译期转型为Object了,我们来看看ArrayList的源代码就知道了。
注意看elementData的定义,它容纳了ArrayList的所有元素,其类型是Object数组,因为Object是所有类的父类,数组又允许协变(Covariant),因此elementData数组可以容纳所有的实例对象。元素加入时向上转型为Object类型(E类型转为Object),取出时向下转型为E类型(Object转为E类型),如此处理而已。
今天不卖辣椒酱了!!!不信你下一单试试。
往期精彩#面试!,一定要注意,避免踩这些雷!!
2021-01-14
挺详细的spring+springmvc+mybatis配置整合|含源代码
2021-01-13
java中的泛型类型擦除
2021-01-12
投资理财要趁早,基金风险是最小!
2021-01-10
一百馒头一百僧,大僧三个更无争,小僧三人分一个,大小和尚得几丁?
2021-01-09
你们好好的学,回头教教我~
2021-01-08
点分享 点点赞 点在看