Java自學-集合框架 泛型Generic

ArrayList上使用泛型

步驟 1 : 泛型 Generichtml

不指定泛型的容器,能夠存聽任何類型的元素
指定了泛型的容器,只能存放指定類型的元素以及其子類java

package property;
 
public class Item {
    String name;
    int price;
     
    public Item(){
         
    }
     
    //提供一個初始化name的構造方法
    public Item(String name){
        this.name = name;
    }
     
    public void effect(){
        System.out.println("物品使用後,能夠有效果");
    }
     
}
package collection;
   
import java.util.ArrayList;
import java.util.List;
  
import property.Item;
import charactor.APHero;
import charactor.Hero;
   
public class TestCollection {
  
    public static void main(String[] args) {
          
        //對於不使用泛型的容器,能夠往裏面放英雄,也能夠往裏面放物品
        List heros = new ArrayList();
          
        heros.add(new Hero("蓋倫"));
          
        //原本用於存放英雄的容器,如今也能夠存放物品了
        heros.add(new Item("冰杖"));
          
        //對象轉型會出現問題
        Hero h1=  (Hero) heros.get(0);
        //尤爲是在容器裏放的對象太多的時候,就記不清楚哪一個位置放的是哪一種類型的對象了
        Hero h2=  (Hero) heros.get(1);
          
        //引入泛型Generic
        //聲明容器的時候,就指定了這種容器,只能放Hero,放其餘的就會出錯
        List<Hero> genericheros = new ArrayList<Hero>();
        genericheros.add(new Hero("蓋倫"));
        //若是不是Hero類型,根本就放不進去
        //genericheros.add(new Item("冰杖"));
          
        //除此以外,還能存放Hero的子類
        genericheros.add(new APHero());
         
        //而且在取出數據的時候,不須要再進行轉型了,由於裏面確定是放的Hero或者其子類
        Hero h = genericheros.get(0);
         
    }
       
}

步驟 2 : 泛型的簡寫學習

爲了避免使編譯器出現警告,須要先後都使用泛型,像這樣:this

List<Hero> genericheros = new ArrayList<Hero>();

不過JDK7提供了一個能夠略微減小代碼量的泛型簡寫方式設計

List<Hero> genericheros2 = new ArrayList<>();

後面的泛型能夠用<>來代替code

package collection;
   
import java.util.ArrayList;
import java.util.List;
 
import charactor.Hero;
   
public class TestCollection {
  
    public static void main(String[] args) {
        List<Hero> genericheros = new ArrayList<Hero>();
        List<Hero> genericheros2 = new ArrayList<>();
      
    }
       
}

練習支持泛型的ArrayListhtm

藉助泛型和前面學習的面向對象的知識,設計一個ArrayList,使得這個ArrayList裏,又能夠放Hero,又能夠放Item,可是除了這兩種對象,其餘的對象都不能放對象

答案 :接口

首先建立一個接口 LOL,不須要在其中聲明任何方法
接着讓Hero和Item都實現LOL接口
最後,聲明一個ArrayList的變量lolList,它的泛型是 get

List<LOL> lolList = new ArrayList<>();

這樣在lolList中就即放Hero對象,又放Item對象了。

相關文章
相關標籤/搜索