集合框架-泛型概述及擦除補償
阿新 • • 發佈:2021-10-24
1 package cn.itcast.p1.generic.demo; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6 public class GenericDemo { 7 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 ArrayList<String> al = new ArrayList<String>();//Generic編譯時就能發現型別錯誤 11 // ArrayList al = new ArrayList(); 12 13 al.add("abc");//public boolean add(Object obj) 14 al.add("hahah"); 15 16 // al.add(4);// java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String 17 Iterator<String> it = al.iterator();18 while(it.hasNext()) { 19 String str = it.next(); 20 System.out.println(str); 21 } 22 // Class clazz = "aa".getClass();擦除補償 23 // clazz.getName(); 24 } 25 26 }
1 泛型: 2 jdk1.5出現的安全機制。 3 4 好處: 5 1,將執行時期的問題ClassCastException轉到了編譯時期。泛型6 2,避免了強制轉換的麻煩 7 8 <>:什麼時候用?當操作的引用資料型別不確定的時候。就使用<>。將要操作的引用資料型別傳入即可 9 其實<>就是一個接收具體引用資料型別的引數範圍。 10 11 在程式中,只要用到了帶有<>的類或者介面,就要明確傳入的具體引用資料型別。 12 13 泛型技術是給編譯器使用的技術,用於編譯時期。確保了型別安全 14 15 執行時,會將泛型去掉,生成的class檔案中是不帶泛型的,這個稱為泛型的擦除。 16 為什麼擦除呢?因為為了相容執行的類載入器。 17 18 泛型的擦除補償:在執行時,通過獲取元素的型別進行轉換動作。不用使用者再強制轉換了 19 void show(int x,int y) 20 21 class Tool<e1,e2,e3,e4> 22 23 24 例如 Tool<String,Demo,Person,Integer> t = new Tool<String,Demo,Person,Integer>();