1. 程式人生 > >Java泛型擦除

Java泛型擦除

類型信息 png ive over tool 創建 edit sid 註意點

Java泛型擦除

什麽是泛型擦除?

首先了解一下什麽是泛型?我個人的理解:因為集合中能夠存儲隨意類型的對象。可是集合中最先存儲的對象類型一旦確定後,就不能在存儲其它類型的對象了,否則,編譯時不會報錯。但執行時會拋出ClassCastException異常。為解決此問題,引入泛型,指定該集合對象中存儲的對象類型,這樣一旦該集合中存儲了其它的對象類型,編譯時會提示錯誤!(理解不當之處。希望大神多指點技術分享)。

泛型的擦除就是說。在編譯的時候集合中指定了確定的對象類型,但在執行時將集合中能夠存儲的該對象類型擦除了!

舉例來說的話就是:

[html] view plaincopy技術分享
技術分享
  1. import java.awt.List;
  2. import java.util.ArrayList;
  3. public class GenericDemo {
  4. public static void main(String[] args) {
  5. ArrayList<String> a = new ArrayList<String>();
  6. // 集合a中僅僅能存儲String類型的對象
  7. a.add("abc");
  8. a.add(6); // 報錯.執行時凝視掉
  9. ArrayList<Integer> b = new ArrayList<Integer>();
  10. // 集合b中僅僅能存儲Integer類型的對象
  11. b.add(6);
  12. b.add("abc"); // 報錯.執行時凝視掉
  13. System.out.println(a.getClass() == b.getClass());
  14. // 輸出結果為 true
  15. /*
  16. * 原因:泛型執行時具有擦除功能;ArrayList<
    String>和ArrayList<Integer>擦除
  17. * 後的類型為ArrayList
  18. */
  19. }
  20. }
每一個類都有一個class屬性,該樣例同一時候說明使用泛型不會改變class屬性的返回值。

註意點:Java不能創建泛型數組:由於Java中的數組都是通過反射動態建立的,在執行時,泛型會擦除類型信息,所以沒有了類型信息。當然也就不能構造出數組了。

以上言語措辭或對問題的認識上有什麽不當的,希望路過大神不吝賜教!

Java泛型擦除