Java泛型擦除
阿新 • • 發佈:2017-05-05
類型信息 png ive over tool 創建 edit sid 註意點
Java泛型擦除:
什麽是泛型擦除?
首先了解一下什麽是泛型?我個人的理解:因為集合中能夠存儲隨意類型的對象。可是集合中最先存儲的對象類型一旦確定後,就不能在存儲其它類型的對象了,否則,編譯時不會報錯。但執行時會拋出ClassCastException異常。為解決此問題,引入泛型,指定該集合對象中存儲的對象類型,這樣一旦該集合中存儲了其它的對象類型,編譯時會提示錯誤!(理解不當之處。希望大神多指點)。
泛型的擦除就是說。在編譯的時候集合中指定了確定的對象類型,但在執行時將集合中能夠存儲的該對象類型擦除了!
舉例來說的話就是:
[html] view plaincopy
- import java.awt.List;
- import java.util.ArrayList;
- public class GenericDemo {
- public static void main(String[] args) {
- ArrayList<String> a = new ArrayList<String>();
- // 集合a中僅僅能存儲String類型的對象
- a.add("abc");
- a.add(6); // 報錯.執行時凝視掉
-
- ArrayList<Integer> b = new ArrayList<Integer>();
- // 集合b中僅僅能存儲Integer類型的對象
- b.add(6);
- b.add("abc"); // 報錯.執行時凝視掉
- System.out.println(a.getClass() == b.getClass());
- // 輸出結果為 true
- /*
-
* 原因:泛型執行時具有擦除功能;ArrayList<
- * 後的類型為ArrayList
- */
- }
- }
註意點:Java不能創建泛型數組:由於Java中的數組都是通過反射動態建立的,在執行時,泛型會擦除類型信息,所以沒有了類型信息。當然也就不能構造出數組了。
以上言語措辭或對問題的認識上有什麽不當的,希望路過大神不吝賜教!
Java泛型擦除