一、泛型
泛型,是JDK1.5的新特性之一。
泛型提供了編譯時類型安全檢測機制,該機制允許程序在編譯時檢測到非法的類型。
泛型的本質是參數化類型,也就是說所操作的數據類型被指定爲一個參數。
二、集合中的泛型
//集合中的泛型
@Test
public void test_1(){
//沒有泛型限定的集合,裏面可以存儲任何類型的對象引用
List list_1 = new ArrayList();
//存儲了不同類型的數據,遍歷的時候會出錯
list_1.add("abc");
list_1.add(123);
//添加泛型的集合,裏面只能存儲泛型所限定類型的數據,保證了集合中數據類型的一致性和安全性
//以下定義的集合只能存儲String類型的數據
List<String> list_2 = new ArrayList<String>();
list_2.add("abc");
//list_2.add(123); 這句代碼編譯會出錯!!!
}
三、僞泛型
Java編譯後的字節碼文件中是沒有泛型的,泛型是限定在編譯的時候的安全機制,所以Java中的泛型稱之爲僞泛型。
四、泛型類、泛型方法
其實在上面集合演示的代碼中,ArrayList就是一個泛型類,其定義如下:
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
以上類的定義中,<E>就是泛型的限定,其中的字母E可以理解爲一個變量,傳過來什麼類型,就是什麼類型。
例:
public class MyGenerics<E> {
private E e;
//泛型方法
public void add(E e) {
this.e = e;
}
//泛型方法
public E get() {
return e;
}
}
class Test{
public static void main(String[] args){
MyGenerics<String> mg_1 = new MyGenerics<>();
mg_1.add("abc");
mg_1.add("cde");
System.out.println(mg_1.get());
//mg_1.add(123); 這句代嗎編譯錯誤
}
}
五、泛型通配符
泛型通配符使用”?”號,匹配所有類型。
六、泛型限定
<? extends T>表示該通配符所代表的類型是T類型的子類。
<? super T>表示該通配符所代表的類型是T類型的父類。