泛型在實際開發和麪試中都非常重要,所以我們今天來談談這個話題
1,什麼是泛型
泛型的本質是爲了參數化類型,通過泛型指定的不同類型來控制形參具體限制的類型。
舉個例子!
我們要定義一個只能存放整數的集合,怎麼寫?
List list = new ArrayList();
這樣對嗎?其實不行,這樣我們可以往list添加任務數據類型
所以這個時候,解決辦法就是採用泛型,可以這麼來寫
List<Integer> list = new ArrayList<>();
通過參數化類型,就可以限制list可以添加的類型
2,泛型的特點,只對編譯期間有效,在運行期間無效(泛型的擦除)
我們來看看,以下這兩個集合是同個類型嗎?
List list1 = new ArrayList<>();
List list2 = new ArrayList<>();
很明顯,在編譯期間,兩個集合都很好控制了添加的數據類型。
但是,在運行期間,這個類型會被擦除。我們來做個試驗就得到這個結論
public static void main(String[] args) {
Listlist1 = new ArrayList<>();
List list2 = new ArrayList<>();
System.out.println(list1.getClass() == list2.getClass());
}
可以試試結果,我打包票,出來的結果是true
3,注意點
泛型的參數類型只能是引用類型,不能是基本數據類型,比如int
4,泛型的使用
4.1 泛型類
public class GenericTest {
public static void main(String[] args) {
GenericClassg1 = new GenericClass<();
g1.setKey(1);
System.out.println(g1.getKey());
}
}
class GenericClass{
private T key;
public void setKey(T key){
this.key = key;
}
public T getKey(){
return this.key;
}
}
4.2 泛型接口
interface GenericInterface{
public T getNext();
}