步驟 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,它的泛型是
List<LOL> lolList = new ArrayList<>();
這樣在lolList中就即放Hero對象,又放Item對象了。