Java 基础 - 既然泛型被擦除了,为什么调用<T>get()不需要进行强制转换?
因为类型擦除的问题,所有的泛型类型变量最后都会被替换为原始类型。
既然都被替换为原始类型,那么为什么我们在获取的时候,不需要进行强制类型转换呢?
看下ArrayList.get()
方法:
public E get(int index) {
RangeCheck(index);
return (E) elementData[index];
}
可以看到,在return
之前,会根据泛型变量进行强转。假设泛型类型变量为Date
,虽然泛型信息会被擦除掉,但是会将(E) elementData[index]
,编译为(Date)elementData[index]
。所以我们不用自己进行强转。当存取一个泛型域时也会自动插入强制类型转换。假设Pair
类的value
域是public
的,那么表达式:
Date date = pair.value;
也会自动地在结果字节码中插入强制类型转换。
分类:
Java 基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?