不理解泛型的看進來,絕不後悔!!!

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類中的共性方法,集合中元素自身方法無法使用。

六、泛型限定

<? extends T>表示該通配符所代表的類型是T類型的子類。 <? super T>表示該通配符所代表的類型是T類型的父類。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章