Java泛型擦除的原理及其影响是什么?
作者:小宇宙叶知秋
时间:2023-04-25
来源:正软商城
浏览:5
1、说明在编译过程中,可以获得类型变量的信息。因此,set方法可以在编译器中进行类型检查,非法类型不能通过编译。但是对于get方法,由于擦除机制,操作时的实际引用类型是Object类型。为了恢复返回结果的类型,编译器在get后添加了类型转换。因此,在genericHolder.class文件main方法主体的第18行有类型转换的逻辑。这是编译器自动添加的。因此,我们处理了泛型对象的读写位置,并对代码添加了限制。2、实例//GenericHolder.javapublicclassGenericHolder
本文目录
1、说明
在编译过程中,可以获得类型变量的信息。因此,set方法可以在编译器中进行类型检查,非法类型不能通过编译。但是对于get方法,由于擦除机制,操作时的实际引用类型是Object类型。
为了恢复返回结果的类型,编译器在get后添加了类型转换。因此,在genericHolder.class文件main方法主体的第18行有类型转换的逻辑。这是编译器自动添加的。
因此,我们处理了泛型对象的读写位置,并对代码添加了限制。
2、实例
//GenericHolder.java public class GenericHolder{ T obj; public T getObj() { return obj; } public void setObj(T obj) { this.obj = obj; } public static void main(String[] args) { GenericHolder holder = new GenericHolder<>(); holder.setObj("Item"); String s = holder.getObj(); } } //GenericHolder.class public class GenericHolder { T obj; public GenericHolder(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object." ":()V 4: return public T getObj(); Code: 0: aload_0 1: getfield #2 // Field obj:Ljava/lang/Object; 4: areturn public void setObj(T); Code: 0: aload_0 1: aload_1 2: putfield #2 // Field obj:Ljava/lang/Object; 5: return public static void main(java.lang.String[]); Code: 0: new #3 // class GenericHolder 3: dup 4: invokespecial #4 // Method " ":()V 7: astore_1 8: aload_1 9: ldc #5 // String Item 11: invokevirtual #6 // Method setObj:(Ljava/lang/Object;)V 14: aload_1 15: invokevirtual #7 // Method getObj:()Ljava/lang/Object; 18: checkcast #8 // class java/lang/String 21: astore_2 22: return }
作者最新文章
12306APP退票扣多少钱48小时和24小时差别
2026-11-10 16:08
蛙蛙写作在线使用网址:电脑网页端登录入口直达
2026-11-10 10:18
笔趣阁在线阅读免费无弹窗小说网站入口教程
2026-11-05 08:38
Excel单元格内换行教程:Alt+Enter快捷键与自动换行设置
2026-10-30 18:49
3DMax材质贴图浏览器怎么打开
2026-10-29 12:08
上一篇:
怎么使用Java服务器处理图片上传
热门文章
更多
精品专题
更多
Mac软件
更多
火山引擎 网页版
Windows/ macOS/ Linux
火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。
















