<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. 初步理解Java的泛型特性分享

    時間:2025-11-21 09:25:07 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);/pic/pic/pic/pic/integer>

      6.通配符

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

      List unknownNumberList; List unknownBaseLineIntgerList; unknownList2 = listString; unknownList = unknownList2; listString = unknownList;/pic/string>

      7.數組范型

      可以使用帶范型參數值的類聲明數組,卻不可有創建數組

      List[] iListArray; new ArrayList[10];/pic/integer>

      三、擴展

      1、extends語句

      使用extends語句將限制泛型參數的適用范圍。例如:

      ,則表示該泛型參數的使用范圍是所有實現了collection接口的calss。如果傳入一個則程序編譯出錯。

      2、super語句

      super語句的作用與extends一樣,都是限制泛型參數的適用范圍。區別在于,super是限制泛型參數只能是指定該class的上層父類。

      例如,表示該泛型參數只能是List和List的上層父類。

      3、通配符

      使用通配符的目的是為了解決泛型參數被限制死了不能動態根據實例來確定的缺點。

      舉個例子:public class SampleClass < T extends S> {…}

      假如A,B,C,…Z這26個class都實現了S接口。我們使用時需要使用到這26個class類型的泛型參數。那實例化的時候怎么辦呢?依次寫下

      SampleClass a = new SampleClass();SampleClass a = new SampleClass();…SampleClassa = new SampleClass();

      這顯然很冗余,還不如使用Object而不使用泛型,呵呵,是吧?

      別著急,咱們使用通配符,就OK了。

      SampleClass sc = new SampleClass();

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

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

    講解Java的泛型01-18

    java泛型方法11-21

    java泛型方法推薦11-12

    Java泛型是什么09-20

    java編譯器的泛型09-28

    Java的泛型擦除和運行時泛型信息獲取10-07

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

    Java語法的主要特性09-16

    Java中數組的特性03-21

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人