<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            java語言

            初步理解Java的泛型特性分享

            時間:2025-05-17 12:44:44 java語言 我要投稿
            • 相關推薦

            初步理解Java的泛型特性分享

              初步理解Java的泛型特性

              在Java SE1.5中,增加了一個新的特性:泛型(日本語中的總稱型)。何謂泛型呢?通俗的說,就是泛泛的指定對象所操作的類型,而不像常規方式一樣使用某種固定的類型去指定。泛型的本質就是將所操作的數據類型參數化,也就是說,該數據類型被指定為一個參數。這種參數類型可以使用在類、接口以及方法定義中。

              一、為什么使用泛型呢?

              在以往的J2SE中,沒有泛型的情況下,通常是使用Object類型來進行多種類型數據的操作。這個時候操作最多的就是針對該Object進行數據的強制轉換,而這種轉換是基于開發者對該數據類型明確的情況下進行的(比如將Object型轉換為String型)。倘若類型不一致,編譯器在編譯過程中不會報錯,但在運行時會出錯。

              使用泛型的好處在于,它在編譯的時候進行類型安全檢查,并且在運行時所有的轉換都是強制的,隱式的,大大提高了代碼的重用率。

              二、定義&使用

              類型參數的命名風格為:

              推薦你用簡練的名字作為形式類型參數的名字(如果可能,單個字符)。最好避免小寫字母,這使它和其他的普通

              的形式參數很容易被區分開來。

              使用T代表類型,無論何時都沒有比這更具體的類型來區分它。這經常見于泛型方法。如果有多個類型參數,我們

              可能使用字母表中T的臨近的字母,比如S。

              如果一個泛型函數在一個泛型類里面出現,最好避免在方法的類型參數和類的類型參數中使用同樣的名字來避免混

              淆。對內部類也是同樣。

              1.定義帶類型參數的類

              在定義帶類型參數的類時,在緊跟類命之后的<>內,指定一個或多個類型參數的名字,同時也可以對類型參數的取

              值范圍進行限定,多個類型參數之間用,號分隔。

              定義完類型參數后,可以在定義位置之后的類的幾乎任意地方(靜態塊,靜態屬性,靜態方法除外)使用類型參數,

              就像使用普通的類型一樣。

              注意,父類定義的類型參數不能被子類繼承。

              public class TestClassDefine{ .... }

              2.定義待類型參數方法

              在定義帶類型參數的方法時,在緊跟可見范圍修飾(例如public)之后的<>內,指定一個或多個類型參數的名字,

              同時也可以對類型參數的取值范圍進行限定,多個類型參數之間用,號分隔。

              定義完類型參數后,可以在定義位置之后的方法的任意地方使用類型參數,就像使用普通的類型一樣。

              例如:

              publicT testGenericMethodDefine(T t, S s){ ... }

              注意:定義帶類型參數的方法,騎主要目的是為了表達多個參數以及返回值之間的關系。例如本例子中T和S的繼

              承關系, 返回值的類型和第一個類型參數的值相同。

              如果僅僅是想實現多態,請優先使用通配符解決。通配符的內容見下面章節。

              publicvoid testGenericMethodDefine2(Lists){ ... }

              應改為

              public void testGenericMethodDefine2(List<?> s){ ... }

              3. 類型參數賦值

              當對類或方法的類型參數進行賦值時,要求對所有的類型參數進行賦值。否則,將得到一個編譯錯誤。

              4.對帶類型參數的類進行類型參數賦值

              對帶類型參數的類進行類型參數賦值有兩種方式

              第一聲明類變量或者實例化時。例如

              Listlist; list = new ArrayList;

              第二繼承類或者實現接口時。例如

              public class MyListextends ArrayListimplements List{...}

              5.對帶類型參數方法進行賦值

              當調用范型方法時,編譯器自動對類型參數進行賦值,當不能成功賦值時報編譯錯誤。例如

              publicT testGenericMethodDefine3(T t, Listlist){ ... } publicT testGenericMethodDefine4(Listlist1, Listlist2){ ... } Number n = null; Integer i = null; Object o = null; testGenericMethodDefine(n, i);//此時T為Number, S為Integer testGenericMethodDefine(o, i);//T為Object, S為Integer Listlist1 = null; testGenericMethodDefine3(i, list1)//此時T為Number Listlist2 = null; testGenericMethodDefine4(list1, list2)//編譯報錯

              6.通配符

              在上面兩小節中,對是類型參數賦予具體的值,除此,還可以對類型參數賦予不確定值。例如

              List unknownNumberList; List unknownBaseLineIntgerList; unknownList2 = listString; unknownList = unknownList2; listString = unknownList;//編譯錯誤 sc = new SampleClass();

              只需要聲明一個sc變量,很方便把!

            【初步理解Java的泛型特性分享】相關文章:

            講解Java的泛型07-13

            java泛型方法10-22

            Java泛型是什么10-17

            java泛型方法推薦05-25

            java編譯器的泛型08-09

            Java的泛型擦除和運行時泛型信息獲取11-09

            Java8自定義帶泛型的函數式接口08-02

            Java語法的主要特性05-24

            Java中數組的特性09-18

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院