av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

java語言

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

時(shí)間:2025-05-17 12:44:44 java語言 我要投稿
  • 相關(guān)推薦

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

  初步理解Java的泛型特性

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

  一、為什么使用泛型呢?

  在以往的J2SE中,沒有泛型的情況下,通常是使用Object類型來進(jìn)行多種類型數(shù)據(jù)的操作。這個(gè)時(shí)候操作最多的就是針對(duì)該Object進(jìn)行數(shù)據(jù)的強(qiáng)制轉(zhuǎn)換,而這種轉(zhuǎn)換是基于開發(fā)者對(duì)該數(shù)據(jù)類型明確的情況下進(jìn)行的(比如將Object型轉(zhuǎn)換為String型)。倘若類型不一致,編譯器在編譯過程中不會(huì)報(bào)錯(cuò),但在運(yùn)行時(shí)會(huì)出錯(cuò)。

  使用泛型的好處在于,它在編譯的時(shí)候進(jìn)行類型安全檢查,并且在運(yùn)行時(shí)所有的轉(zhuǎn)換都是強(qiáng)制的,隱式的,大大提高了代碼的重用率。

  二、定義&使用

  類型參數(shù)的命名風(fēng)格為:

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

  的形式參數(shù)很容易被區(qū)分開來。

  使用T代表類型,無論何時(shí)都沒有比這更具體的類型來區(qū)分它。這經(jīng)常見于泛型方法。如果有多個(gè)類型參數(shù),我們

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

  如果一個(gè)泛型函數(shù)在一個(gè)泛型類里面出現(xiàn),最好避免在方法的類型參數(shù)和類的類型參數(shù)中使用同樣的名字來避免混

  淆。對(duì)內(nèi)部類也是同樣。

  1.定義帶類型參數(shù)的類

  在定義帶類型參數(shù)的類時(shí),在緊跟類命之后的<>內(nèi),指定一個(gè)或多個(gè)類型參數(shù)的名字,同時(shí)也可以對(duì)類型參數(shù)的取

  值范圍進(jìn)行限定,多個(gè)類型參數(shù)之間用,號(hào)分隔。

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

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

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

  public class TestClassDefine{ .... }

  2.定義待類型參數(shù)方法

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

  同時(shí)也可以對(duì)類型參數(shù)的取值范圍進(jìn)行限定,多個(gè)類型參數(shù)之間用,號(hào)分隔。

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

  例如:

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

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

  承關(guān)系, 返回值的類型和第一個(gè)類型參數(shù)的值相同。

  如果僅僅是想實(shí)現(xiàn)多態(tài),請(qǐng)優(yōu)先使用通配符解決。通配符的內(nèi)容見下面章節(jié)。

  publicvoid testGenericMethodDefine2(Lists){ ... }

  應(yīng)改為

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

  3. 類型參數(shù)賦值

  當(dāng)對(duì)類或方法的類型參數(shù)進(jìn)行賦值時(shí),要求對(duì)所有的類型參數(shù)進(jìn)行賦值。否則,將得到一個(gè)編譯錯(cuò)誤。

  4.對(duì)帶類型參數(shù)的類進(jìn)行類型參數(shù)賦值

  對(duì)帶類型參數(shù)的類進(jìn)行類型參數(shù)賦值有兩種方式

  第一聲明類變量或者實(shí)例化時(shí)。例如

  Listlist; list = new ArrayList;

  第二繼承類或者實(shí)現(xiàn)接口時(shí)。例如

  public class MyListextends ArrayListimplements List{...}

  5.對(duì)帶類型參數(shù)方法進(jìn)行賦值

  當(dāng)調(diào)用范型方法時(shí),編譯器自動(dòng)對(duì)類型參數(shù)進(jìn)行賦值,當(dāng)不能成功賦值時(shí)報(bào)編譯錯(cuò)誤。例如

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

  6.通配符

  在上面兩小節(jié)中,對(duì)是類型參數(shù)賦予具體的值,除此,還可以對(duì)類型參數(shù)賦予不確定值。例如

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

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

【初步理解Java的泛型特性分享】相關(guān)文章:

講解Java的泛型07-13

java泛型方法10-22

Java泛型是什么10-17

java泛型方法推薦05-25

java編譯器的泛型08-09

Java的泛型擦除和運(yùn)行時(shí)泛型信息獲取11-09

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

Java語法的主要特性05-24

Java中數(shù)組的特性09-18