.NET泛型,涉及到CLR和內存模型的修改;JAVA,直接在bytecode層完事
JAVA的泛型,絕對的語法糖,高級編譯後,都擦除了類型。比如ArrayList<Apple>的add方法,仍然是Method java/util/ArrayList.add:(Ljava/lang/Object;)Z。get方法,仍然是Method java/util/ArrayList.get:(I)Ljava/lang/Object;,同時增加了強制轉換語句checkcast。用javap很容易發現。
JAVA定義個泛型類,類型還是被擦除。比如
1. public void set(K value) {},生成的bytecode爲 public void set(java.lang.Object);
2. public K get() { return null; },生成的bytecode爲public java.lang.Object get();
看get和set的調用代碼,分別爲Method example/holding/GenericApple.set:(Ljava/lang/Object;)V 和 Method example/holding/GenericApple.get:()Ljava/lang/Object; checkcast
看JRE中的ArrayList的bytecode,執行命令:
javap -classpath D:\jdk1.5.0_12\jre\lib\rt.jar -c java.util.ArrayList >> ArrayList.bc
查看ArrayList.bc,看get:public java.lang.Object get(int); 看add: public boolean add(java.lang.Object);
學習筆記之泛型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
(六)泛型-泛型應用之不同實體間同名屬性的自動賦值-BeanUtils 的使用
bestcxx
2018-09-03 19:24:06
關於對 java 泛型中T extendscompareable
yqme
2020-06-13 17:17:56
Java 理論和實踐: 瞭解泛型
iteye_19166
2020-02-22 09:29:17
java 在一個方法中返回一個泛型變量
寒林一带
2018-12-07 13:11:17
10 道關於 Java 泛型的面試題
茅坤宝骏氹
2018-11-04 15:39:57
揭開Java 泛型類型擦除神祕面紗
茅坤宝骏氹
2018-10-04 10:36:12
Java泛型的注意事項以及使用
Retror
2018-09-03 07:48:08
黑馬程序員--java高新技術----泛型
hongto57
2018-09-01 10:10:34
關於對 java 泛型中T extendscompareable<? super T>理解
yqme
2018-08-27 19:50:57
java 泛型實現Dao 操作的重用
qq1049153718
2018-08-26 11:57:36
黑馬程序員__Java中的泛型
zhaoyanyan_2011
2018-08-23 23:58:14
最新文章