亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java泛型使用入門實例分析

發布時間:2022-04-06 13:55:30 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java泛型使用入門實例分析”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java泛型使用入門實例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1、什么是泛型?

泛型其實就是將類型作為參數傳遞,泛型允許程序員在編寫代碼時使用一些以后才指定的類型 ,在實例化該類時將想要的類型作為參數傳遞,來指明這些類型。

為什么要引入泛型?

例如:自己實現一個順序表

public class MyArrayList {
    public int[] elem;
    public int usedSize;

    public MyArrayList() {
        this.elem = new int[10];
    }
    // add方法
    public void add(int val) {
        // 暫時不考慮擴容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public int get(int pos) {
        return elem[pos];
    }
}

這里可以看出,在使用上面這個自定義的順序表時,我們只能添加 int 類型的元素,我們知道java集合中的順序表,可以添加任何類型的數據,怎么實現的呢?這里我們先嘗試將 int 類型變為Object類型,這樣就可以保證能傳入任何類型。

public class MyArrayList {
    public Object[] elem;
    public int usedSize;

    public MyArrayList() {
        this.elem = new Object[10];
    }
    // add方法
    public void add(Object val) {
        // 暫時不考慮擴容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public Object get(int pos) {
        return elem[pos];
    }
}

main方法中往對象中添加數據時,可以添加任意類型的數據。但是,當需要取出數據時,因為返回的是Object類型,需要進行強轉才能用相對應的類型來接收,非常麻煩。

public static void main(String[] args) {
        MyArrayList myArrayList = new MyArrayList();
        myArrayList.add(1);
        myArrayList.add("hello");
        int array1 = (int)myArrayList.get(0);
        String array2 = (String)myArrayList.get(1);
    }

所以問題來了,難道每次都要強轉一下才能接收嗎,能否不強轉呢?這時候我們就想到在創建一個實例對象時,可以將想要的類型作為參數傳遞,讓這個對象中全部存傳入的類型的數據,那么拿出來的時候,就可以明確該對象中所有的數據都是該類型,不需要強轉了。這就引入了泛型。

public class MyArrayList<E> {
	// 在編寫程序時,不指定具體的類型,而用<E>這里的E來暫時代替
    // 具體的類型在實例化對象時傳入
    public E[] elem;
    public int usedSize;

    public MyArrayList() {
    	// 這里的寫法不是特別準確,應該用反射機制,這里先這樣寫
        this.elem = (E[])new Object[10];
    }
    // add方法
    public void add(E val) {
        // 暫時不考慮擴容問題,這里只是為了講泛型
        elem[usedSize++] = val;
    }
    // get方法
    public E get(int pos) {
        return elem[pos];
    }
}
public static void main(String[] args) {

        MyArrayList<Integer> myArrayList1 = new MyArrayList<>();
        myArrayList1.add(1);
        myArrayList1.add(3);
        // myArrayList1.add("world");// 這里會報錯,因為傳入的數據不是指定的類型,所以泛型還有自動對類型進行檢查的作用
        int I1 = myArrayList1.get(0);
        
        MyArrayList<String> myArrayList2 = new MyArrayList<>();
        myArrayList2.add("hello");
        myArrayList2.add("world");
        String s1 = myArrayList2.get(0);
    }

這樣就保證了能傳入任何類型的數據,同時在拿出時也不需要強轉!泛型的意義:

1、自動對類型進行檢查

2、自動對類型進行強制類型轉換

那么這里MyArrayList對應對象的類型是什么呢?是MyArrayList< Integer > 之類的嗎?

Java泛型使用入門實例分析

這里可以看出,實例創建的對象他的類型都是MyArrayList,而<>中的內容不參與泛型類型的組成,那么<>里面的類型哪里去了呢?這就要了解泛型的工作機制了。

2、泛型是怎么編譯的

數組和泛型之間的一個重要區別是它們如何強制類型檢查。具體來說,數組在運行時存儲和檢查類型信息。但是,泛型在編譯時檢查類型錯誤,并且在運行時沒有類型信息。

泛型的編譯機制:擦除機制

在編譯時,將 MyArrayList 中的 E 擦成了 Object 類型。

Java泛型使用入門實例分析

在main方法中都擦成了 MyArrayList 類型。

Java泛型使用入門實例分析

讀到這里,這篇“Java泛型使用入門實例分析”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

井研县| 盘山县| 平阳县| 盐城市| 大新县| 武穴市| 益阳市| 遂昌县| 海兴县| 贵定县| 阳新县| 绍兴市| 平顶山市| 涞水县| 博白县| 高清| 固镇县| 丹寨县| 班玛县| 东宁县| 绥棱县| 荣成市| 巨野县| 册亨县| 德格县| 枝江市| 青阳县| 新巴尔虎左旗| 张家港市| 松溪县| 周至县| 额敏县| 南江县| 慈利县| 阿拉善右旗| 赞皇县| 峨眉山市| 无为县| 班戈县| 武乡县| 武宣县|