Java泛型知識整理

一、泛型

泛型,是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類型的父類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章