JAVA_基礎泛型

泛型

  1. 所謂泛型,就是容許在定義類、接口時經過一個標識表示類中某個屬性的類 型或者是某個方法的返回值及參數類型。這個類型參數將在使用時(例如, 繼承或實現這個接口,用這個類型聲明變量、建立對象時)肯定(即傳入實 際的類型參數,也稱爲類型實參)。java

  2. 從JDK1.5之後,Java引入了「參數化類型(Parameterized type)」的概念, 容許咱們在建立集合時再指定集合元素的類型,正如:List,這代表 該List只能保存字符串類型的對象。安全

JDK1.5改寫了集合框架中的所有接口和類,爲這些接口、類增長了泛型支持, 從而能夠在聲明集合變量、建立集合對象時傳入類型實參。框架

在集合中使用泛型:code

  1. 集合接口或集合類在JDK 5.0時都修改成帶泛型的結構。
  2. 在實例化集合類時,能夠指明具體的泛型類型。
  3. 指明完之後,在集合類或接口中凡是定義類或接口時,內部機構(好比:方法、構造器、屬性等)使用到類的泛型的位置,都指定爲實例化的泛型的類型。
    好比:add(E e) →實例化之後:add(Integer e)
  4. 注意點:泛型的類型必須時類,不能是基本數據類型。須要用到基本數據類型時,可使用包裝類替換。
  5. 若是實例化時,沒有指明泛型的類型。默認類型爲java.lang.Object類型

在集合中使用泛型以前的狀況(以ArrayList爲例)對象

public void test() {
        ArrayList list = new ArrayList();
        // 要求:存放數字
        list.add(123);
        list.add(456);
        list.add(848);
        list.add(-485);
        // 問題一:類型不安全
        list.add("Tom");
        for (Object score : list) {
            // 問題二:強轉時,可能出現ClassCastException異常
            int stuScore = (Integer) score;
            System.out.println(stuScore);
        }
    }

在集合中使用泛型的狀況(以ArrayList爲例)繼承

public void test2() {
        ArrayList<Integer> list = new ArrayList<Integer>();
    	// JDK 7新特性:類型推斷
    	// ArrayList<Integer> list = new ArrayList<>();
        list.add(85);
        list.add(75);
        list.add(15);
        list.add(-87);
        // 編譯時,就會進行檢查,保證數據的安全
        //list.add("Tom");
        // 方式一
        for (Integer score : list) {
            // 避免了強轉操做
            int stuScore = score;
            System.out.println(stuScore);
        }
        // 方式二
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

在集合中使用泛型的狀況(以HashMap爲例)接口

public void test3() {
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    // JDK 7新特性:類型推斷
    HashMap<String, Integer> map = new HashMap<>();
    map.put("Tom",87);
    map.put("Jerry",65);
    map.put("Mack",87);
    // map.put(125,"ABC");
    // 泛型的嵌套
    Set<Map.Entry<String,Integer>> entry = map.entrySet();
    Iterator<Map.Entry<String,Integer>> iterator = entry.iterator();
    while (iterator.hasNext()) {
        Map.Entry<String,Integer> e = iterator.next();
        String key = e.getKey();
        Integer value = e.getValue();
        System.out.println(key + "-----" + value);
    }
}
相關文章
相關標籤/搜索