大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天小编给大家分享一下Java泛型擦除的原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
成都创新互联公司是一家专注于成都网站设计、成都网站制作与策划设计,涵江网站建设哪家好?成都创新互联公司做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:涵江等地区。涵江做网站价格咨询:028-86922220
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 }
以上就是“Java泛型擦除的原理是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。