js 数组参数初始化_不能初始化泛型参数和数组

fc33895f9cb623c84fdcec1aef89113a.png

大家好,我是雄雄,今天分享的主题是:java中,不能初始化泛型参数和数组,原文参考自《编写高质量代码 改善java程序的151个建议》,作者,秦少波。

前言

前几天,发过一篇文章,java中的泛型类型是擦除的,有需要的伙伴可以去看看,今天我们就继续延伸一下java中的泛型,在初始化时,不能对泛型参数和数组初始化,但是泛型集合就不一样,下面我们来具体看看。

泛型类型在编译期是擦除的,我们在类初始化时,无法获得泛型的具体参数,比如下面我们看看下面代码:

eef9ab23dcb7017da791b33206aa449a.png

很显然,t对象和tArray是无法通过编译的。因为编译器在编译时需要获取T类型,但泛型在编译期类型已经被擦除了,所以new T()和new T[5]都会报错,可是为什么new ArrayList<>()不会报错呢?

这是因为ArrayList表面是泛型,其实已经在编译期转型为Object了,我们来看看ArrayList的源代码就知道了。

b453693c53b0915bded43b7f39359885.png

注意看elementData的定义,它容纳了ArrayList的所有元素,其类型是Object数组,因为Object是所有类的父类,数组又允许协变(Covariant),因此elementData数组可以容纳所有的实例对象。元素加入时向上转型为Object类型(E类型转为Object),取出时向下转型为E类型(Object转为E类型),如此处理而已。

今天不卖辣椒酱了!!!不信你下一单试试。

往期精彩

#面试!,一定要注意,避免踩这些雷!!

2021-01-14

0c602c52fa343edd3ea184e445f3977a.png

挺详细的spring+springmvc+mybatis配置整合|含源代码

2021-01-13

4f5cd64f77055e1d180d5007fb418587.png

java中的泛型类型擦除

2021-01-12

c27095056938c969f880827317d5d47a.png

投资理财要趁早,基金风险是最小!

2021-01-10

1a5895e0a83534a8305607eb040c708c.png

一百馒头一百僧,大僧三个更无争,小僧三人分一个,大小和尚得几丁?

2021-01-09

db85e5d4864829d61dc5235622c4d6c4.png

你们好好的学,回头教教我~

2021-01-08

cd0d370d91b3a61d069b4da338d82548.png 411efe9f3319bc871d82a5252be8093b.png 10e6ed2bb9acbaaff714ecc6ec4ecd8b.png点分享 1b74333b2fc4be92cca76199045f35a2.png点点赞 573bacc0601e5e128d7271b7d024f624.png点在看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值