泛型的作用和使用方法

2021-10-16 12:48:25 字數 2427 閱讀 6163

泛型是(generics)是jdk1.5 的乙個新特性,其實就是乙個語法糖(語法糖往往給程式設計師提供了更實用的編碼方式,有益於更好的編碼風格,更易讀。不過其並沒有給語言新增什麼新東西。),本質上就是編譯器為了提供更好的可讀性而提供的一種小手段,小技巧,虛擬機器層面是不存在所謂泛型的概念的。

那麼我們為什麼使用泛型呢,原因在於:

1.通過泛型的語法定義,約束集合元素的型別,進行安全檢查,把錯誤顯示在編譯期

2.**通用性更強(後面有案例)

3.泛型可以提公升程式**的可讀性,但它只是乙個語法糖,對於jvm執行時的效能是沒有任何影響的。

我們先來看乙個簡單的集合**:

collection c =

newarraylist()

; c.

add(1)

; c.

add(2)

; system.out.

println

(c);

我們在編譯器上會發現它有乙個黃色的警告,但是並沒有報錯我們也可以執行,但是也就在這個時候,張三想要再往集合中輸入幾個數字,來通過測試幾個數字相加來熟悉集合的方法如何使用,於是他加入了3,4,5

collection c =

newarraylist()

; c.

add(1)

; c.

add(2)

; c.

add(3)

; c.

add(4)

; c.

add(

'r')

; c.

add(5)

; system.out.

println

(c);

很顯然1~5之間混入了乙個奇怪的東西但是程式並沒有報錯,畢竟字元也可以作為元素而存在嘛,但是張三很崩潰,他算不出他想要的答案(他學了一天了,眼睛已經幾乎看不到編譯器不報錯的問題),張三強忍著眼疼,看了好幾遍終於流著淚找到了錯誤。他想,要是編譯器會報錯就可以了,於是他看了這篇文章。我們看下面的**:

collection

c =newarraylist()

; c.

add(1)

; c.

add(2)

; c.

add(3)

; c.

add(4)

;'r');

c.add(5)

; system.out.

println

(c);

請允許我把加入字元r的一行注釋掉,畢竟它已經開始報錯了。這就是泛型最基本的一種用法。

我們原來在講多型的時候通過向上轉型的方式,來增加了**的靈活性(不需要知道子類的具體特點就能實現執行結果)。

我們用泛型同樣可以做到甚至做得更好。

public

static

void

print

(e arr)

}public

static

void

main

(string[

] args)

; string[

] names =

newstring

; double[

] moneys =

newdouble

; apicollection.

print

(scores)

; apicollection.

print

(names)

; apicollection.

print

(moneys)

;}

我們將e改為object也是同樣的道理,但是現在用e更符合我們的標題嘛。

泛型只是在編譯期間生存,編譯後就被乾掉了,真正執行時,大多情況下取而代之的是object。也就是上乙個方法的e變成了object…他的存在只是為了方便我們程式設計,如果要對型別擦除做詳細解釋可能要用到反射這個目前還沒有講過,所以我們在這裡僅僅先讓大家感受一下型別擦除:

list

l1 =

newarraylist

(); list

l2 =

newarraylist

(); system.out.

println

(l1.

getclass()

== l2.

getclass()

);

上述的題目答案為true原因是因為string和integer的型別均被型別擦除掉了,我們所能看到的編譯後的父類都是arraylist。

泛型 定義和使用含有泛型的方法

定義和使用含有泛型的方法 泛型定義在方法的修飾符和返回值型別之間 格式 修飾符 返回值型別 方法名 引數列表 使用泛型 含有泛型的方法,在呼叫方法的時候確定泛型的資料型別 傳遞什麼型別的引數,泛型就是什麼型別 例如 public class genericmethod 定義乙個含有泛型的靜態方法 p...

泛型基礎和作用

泛型是jdk5才引進的,泛型其實指得就是引數化型別,使得 可以適應多種型別。像容器,list t 大量使用了泛型,它的主要目的之一就是用來指定容器要持有什麼型別的物件。我認為,泛型的好處很多 當沒有使用泛型的情況下,建立了乙個狗的列表,list dogs new arraylist,每次要往狗列表新...

泛型方法和泛型類的使用(學習筆記)

泛型,即 引數化型別 一提到引數,最熟悉的就是定義方法時有形參,然後呼叫此方法時傳遞實參。那麼引數化型別怎麼理解呢?顧名思義,就是將型別由原來的具體的型別引數化,類似於方法中的變數引數,此時型別也定義成引數形式 可以稱之為型別形參 然後在使用 呼叫時傳入具體的型別 型別實參 為什麼要是用泛型呢?泛型...