java泛型的内部原理

  在JDK1.5中加入了泛型,能帮助我们简化代码,能解决不少问题,那JDK1.5中是如何实现的呢 ?
JDK1.5中泛型的实现是擦拭法实现的,不同与c++中的泛型。说擦拭法可能有点难理解,所以从下边的角度理解一下:
我们写一个程序

 1 package com.jdk15;
 2 
 3 import java.util.ArrayList;
 4 
 5 public class Generic {
 6     public static void main(String[] args){
 7         ArrayList<String> list = new ArrayList<String>();
 8         list.add("a");
 9         list.add("b");
10         String str = list.get(0);
11     }
12 }

编译成.class的文件
然后用Jad反编译后的结果:

 1 // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
 2 // Jad home page: http://www.kpdus.com/jad.html
 3 // Decompiler options: packimports(3) 
 4 // Source File Name:   Generic.java
 5 
 6 package com.jdk15;
 7 
 8 import java.util.ArrayList;
 9 
10 public class Generic
11 {
12 
13     public Generic()
14     {
15     }
16 
17     public static void main(String args[])
18     {
19         ArrayList list = new ArrayList();
20         list.add("a");
21         list.add("b");
22         String str = (String)list.get(0);
23     }
24 }
25 

看到这个是否明白了吗 ?
在JDK1.5中,只是在编译期作了下手脚,就是在你编译之前,自动补充了转型,然后编译实现的。
所以JDK1.5中的泛型只简化了代码的编写,并没有提高性能的原因。因为转型并没有去掉。

java泛型的内部原理,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。