JDK1.5中泛型的實現原理
??? 如果你還不知道泛型的使用請看這里??? 在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的文件?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?}
然后用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?
看到這個是否明白了嗎 ??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中的泛型只簡化了代碼的編寫,并沒有提高性能的原因。因為轉型并沒有去掉。
posted on 2006-11-09 23:08 dreamstone 閱讀(3276) 評論(4) 編輯 收藏 所屬分類: jdk相關