3. 注意點
凡事一件事情的發生,必然有其合理性。
泛型是jdk 1.5 加入的一種語言特性,它主要是為了解決在集合類元素預設object型別,新增元素沒有型別限制,導致執行時出現異常的問題。
在我看來泛型主要解決兩個問題:
編譯期的型別檢查。比如list指定型別,新增元素。
動態化的引數型別繫結。比如泛型類的成員變數型別,真正到實現的時候或者new的時候才指定,這樣增加了**的通用性,這和多型有異曲同工之妙。
泛型,也叫作「形式型別引數」,是用於界定引數型別的一種方式。
這樣說可能不大好理解,對比來看,如下**方法,
private
void
sample
(int x, string y)
sample(1
,"str");
//實際引數
x和y 叫做形參,即「形式引數」,是對引數的一種形式化。
1和「str」 叫做實參,即「實際引數」, 是真正傳入的引數實體。
那麼泛型,也叫做「形式型別引數」,顧名思義就是對「引數型別」的一種形式化表示。你可以像傳遞實參一樣,傳遞實際型別過來,這也就增加了**的通用性。
因為泛型是對引數型別的一種形式化表示,所以凡是用到引數型別定義的地方(或者說凡是有變數定義的地方),都可以有泛型存在。
泛型的使用,主要注意語法,其他的使用和引數型別沒有什麼區別。
一般介面定義中,成員變數和成員方法都是有特定預設修飾的。泛型是對其中所用引數型別的限制,這裡需要注意到泛型的使用格式。
public
inte***ce
igeneric
對於介面,有兩種方式實現,因此也就有兩種方式來使用泛型。
不指明泛型的實現
public
class
genericimpl
implements
igeneric
@override
public
void
setparam
(t param)
}
指明泛型的實現
class
genericstring
implements
igeneric
@override
public
void
setparam
(string param)
}
泛型介面中的第一種實現,其實就是泛型類。將implements 去掉,就是標準的泛型類了。
public
class
genclass
public t getdata()
}
使用例項如下:
genclass
genstringclass =
newgenclass
("china");
system.err.
println
(genstringclass.
getdata()
);
輸出:
china
泛型方法兩種形式,定義如下:
有返回值
private
t trans
(genericimpl
impl)
無返回值
private
void
set(genericimpl
impl)
對於靜態的方法而言,由於靜態方法不依賴與類物件的建立,所以靜態方法不能依賴類是泛型類,因此靜態方法使用泛型,必須定義為泛型方法。泛型的型別引數只能是類型別,不能是簡單型別。 泛型的深入理解和案例解析(2) 上下界和萬用字元
在上一小節 泛型的深入理解和案例解析 1 應用篇 我們知道了泛型的基本使用,並且也注意到泛型僅支援類型別,而不支援基本型別。那麼問題出來了,類型別之間有繼承關係,泛型是不是支援呢,本節就將對這個問題進行深入分析。問題1 比如乙個arraylist列表,要往裡邊放入數字,但是不確定integer lo...
深入理解泛型(一)
一 型別推斷 在我們寫泛型 的時候經常有大量的 符號,這樣有時候 一多,也難免會讓開發者在閱讀 過程中會覺得有點暈的,此時我們覺得暈的時候肯定就會這樣想 是不是能夠省掉一些 符號的呢?你有這種需求了,當然微軟這位好人肯定也會幫你解決問題的,這樣就有了我們這部分的內容 型別推斷 意味著編譯器會在呼叫乙...
C 泛型深入理解介紹
引言 在上乙個專題中介紹了c 2.0 中引入泛型的原因以及有了泛型後所帶來的好處,然而上一專題相當於是介紹了泛型的一些基本知識的,對於泛型的效能為什麼會比非泛型的效能高卻沒有給出理由,所以在這個專題就中將會介紹原因和一些關於泛型的其他知識。一 泛型型別和型別引數 泛型型別和其他int,string一...