我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019全年资料大全正版 > 泛型类型变量 >

JAVA泛型中T extends A 擦除时候应该把T擦除为什么呢?

归档日期:06-11       文本归类:泛型类型变量      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部泛型是1.5中引入的一个新的概念,由于不用进行强制转换类型了,所以具有较高的安全性和易用性。因为泛型其实只是在编译器中实现的而虚拟机并不认识泛型类项,所以要在虚拟机中将泛型类型进行擦除。也就是说,在编译阶段使用泛型,运行阶段取消泛型,即擦除。

  擦除是将泛型类型以其父类代替,如String 变成了Object等。其实在使用的时候还是进行带强制类型的转化,只不过这是比较安全的转换,因为在编译阶段已经确保了数据的一致性。更多追问追答追问你……没回答我的问题啊……泛型擦除的话,擦除为其上界,这个例子的上界应该是哪个?追答擦除是将泛型类型以其父类代替。

  也就是说这里擦除的是T,虚拟机中运行时会将T变成其父类代替,如果他父类还有父类,则继续往上走,所谓上界,应该就是最终父类。追问额……不只是这样啊……通常的擦除是用第一边界(上界)来替代的,如果说什么最终父类的话就非Object莫属了。之所以有extends这个关键字重用,就是希望能在泛型类里拥有更具体的类而不是总是使用Object去替代。我举的这个例子包含了三个边界,所以我不知道T最终被什么替代了追答对,我说错了,应该是运行泛型时T会被擦除,如:

本文链接:http://buggystordera.com/fanxingleixingbianliang/511.html