Java泛型
Java 泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。
泛型的本質是參數化類型,也就是說所操作的數據類型被指定爲一個參數。
使用泛型可以避免了類型強轉的麻煩
一、定義格式
修飾符 class 類名<代表泛型的變量> { }
二、集合中的泛型
//集合中的泛型
@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 extends AbstractList implements List, RandomAccess, Cloneable, Serializable
以上類的定義中,就是泛型的限定,其中的字母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); 這句代嗎編譯錯誤
}
}
五、泛型通配符
當使用泛型類或者接口時,傳遞的數據中,泛型類型不確定,可以通過通配符**<?>**表示。但是一旦使用泛型的通配
符後,只能使用Object類中的共性方法,集合中元素自身方法無法使用。