Java泛型擦除和泛型的子类继承限制

本文探讨了Java中泛型的擦除现象,解释了为什么LinkedList<String>不能赋值给LinkedList<Object>。内容包括泛型擦除的概念,它导致的类型信息丢失问题,以及这一特性在Java历史发展中的原因。文章还提出了通过限定边界和利用运行时类型信息(RTTI)来避免泛型擦除带来的问题。
摘要由CSDN通过智能技术生成

一、引

最近发现一个问题,LinkedList<String> ls 不可以被赋值给LinkedList<Object> lo,这是为什么呢?

这是因为Java中是泛型是伪泛型。虽然上面两个泛型的类具有继承关系,但是这两个List之间本身是没有关系的。当上述的

LinkdedList被编译之后,class文件中其变成了LinkedList list,存在泛型擦除的过程。这样来看,上面两个LinkedList其实是可以包

含任何对象的。这个时候如果在泛型为Object的List里插入一个Integer,是没有任何问题的,但是通过引用的赋值方式,所以在

String泛型的List中也有了一个Integer对象,这是非常不合理的,也违背了泛型的意义。

二、泛型擦除

上面提到了泛型擦除这个概念,那么下面就从这点展开,分析一下:

import java.util.*; 
public class ErasedTypeEquivalence { 
    public static void main(String[] args) { 
        Class c1 = new ArrayList<String>().getClass(); 
        Class c2 = new ArrayList<Integer>().getClass(); 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值