中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java如何定義泛型

發布時間:2021-08-30 09:12:55 來源:億速云 閱讀:102 作者:小新 欄目:開發技術

這篇文章主要介紹Java如何定義泛型,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

    定義

    可理解為 適配廣泛的類型,即參數化類型,可以把類型像方法的參數那樣進行傳遞。

    // 以ArrayList為示例
    // 泛型T可以是任意類
    public class ArrayList<T> {
        private T[] array;
        //...
    }
    // 通過泛型的使用,就可創建多種類型的ArrayList
    // 1. 可存儲String的ArrayList:
    ArrayList<String> strList = new ArrayList<String>();
    // 相當于
    public class ArrayList<String> {
        private String[] array;
        //...
    }
    // 2. 可存儲Float的ArrayList:
    ArrayList<Float> floatList = new ArrayList<Float>();
    // 相當于
    public class ArrayList<Float> {
        private Float[] array;
        //...
    }

    意義(即為什么要使用泛型)

    通過定義一種模板方式結構,從而保證類型安全 & 匹配。下面將用ArrayList為示例作為說明。

    1. 背景

    ArrayList的本質:一個可變的Object類型數組

    public class ArrayList {
        private Object[] array;
        // ...
    }

    2. 問題

    在使用ArrayList存儲不同類型時,需要強轉類型,不然容易出現ClassCastException異常。如存儲String類型:

    // 獲取到ArrayList里的Object類型時,必須強制轉型為String
    // 不然容易出現ClassCastException異常
    ArrayList list = new ArrayList();
    list.add("carson ho");
    String first = (String) list.get(0);

    3. 解決方案

    使用泛型將ArrayList變成一種模板:ArrayList,就可以創建任意類型的ArrayList。即:

    // 泛型T可以是任意類
    public class ArrayList<T> {
        private T[] array;
        //...
    }
    // 多種類型
    // 1. 可存儲String的ArrayList:
    ArrayList<String> strList = new ArrayList<String>();
    // 相當于
    public class ArrayList<String> {
        private String[] array;
        //...
    }
    // 2. 可存儲Float的ArrayList:
    ArrayList<Float> floatList = new ArrayList<Float>();
    // 相當于
    public class ArrayList<Float> {
        private Float[] array;
        //...
    }

    作用

    1.使編譯器可在編譯期間對類型進行檢查以提高類型安全,減少運行時由于對象類型不匹配引發的異常;

    2.運行時所有的轉換都是強制、隱式的,大大提高了代碼的重用率。如對集合類取數據時,不需 對存儲的數據 進行強制類型轉2換。

    原理

    基于 類型擦除。即即 使用泛型時加上的類型參數,會在編譯器在編譯時去掉所以,在生成的 Java 字節碼中,不包含泛型中的類型信息。這里需要特別說明的是:

    • Java中的泛型是在編譯器層次實現,編譯器在編譯時盡可能的發現可能出錯的地方,但仍無法避免在運行時刻出現類型轉換異常的情況;

    • 在代碼中定義的List 、List等類型,在編譯后都會變成List

    • JVM看到的只是List,而由泛型附加的類型信息對JVM來說是不可見的

    同時需要特別注意的是:

    • 在無泛型的情況下,通常是使用Object類型來進行多種類型數據的操作,此時操作最多的是針對該Object進行數據的強制轉換

    • 而這種轉換是基于開發者對該數據類型明確的情況下進行(如將Object型轉換為String型);若類型不一致,編譯器在編譯過程中不會報錯,但在運行時會出錯

    額外說明: List能否轉為List?

    不能。具體描述如下:

    Java如何定義泛型

    // 代碼1和代碼2相同
    // 代碼1
    List<String> strings = new LinkedList<String>( ); 
     List<Integer> ints = new LinkedList<Integer>( );
    // 代碼2
     List strings = new LinkedList( ); 
     List ints = new LinkedList( );
    // 轉換方式可以是如下:
    List ss=strings; 
    List<Object> objects=ss;

    以上是“Java如何定義泛型”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

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

    AI

    襄汾县| 大同县| 皮山县| 宁安市| 阜阳市| 吉隆县| 绍兴县| 高安市| 甘孜| 平和县| 襄垣县| 永顺县| 博乐市| 天台县| 辉县市| 聂荣县| 读书| 苗栗市| 略阳县| 吉木乃县| 塘沽区| 建平县| 图片| 永寿县| 荔浦县| 来安县| 鸡东县| 景东| 龙州县| 林州市| 伊吾县| 德庆县| 讷河市| 红原县| 社旗县| 民丰县| 鱼台县| 东至县| 岗巴县| 金寨县| 冕宁县|