概念:泛型,即「參數化類型」。就是將原來具體的型別參數化,類似方法中的變數參數,此時型別也定義成參數形式(可以稱之為型別形參),然後在使用/呼叫時傳入具體的型別(型別實參)。
本質:為了參數化類型(在不建立新的類型的情況下,透過泛型指定的不同類型來控制形參具體限制的類型)。也就是說在泛型使用過程中,操作的資料型別被指定為一個參數,這種參數型別可以用在類別、介面和方法中,分別稱為泛型類別、泛型介面、泛型方法。
三種使用方式:泛型類別、泛型介面、泛型方法
類型通配符:
1 )型別通配符一般是使用?代替具體的類型參數。例如List> 在邏輯上是List
2)型別通配符上線透過形如List來定義,如此定義就是通配符泛型值接受Number及其下層子類別型別。
泛型提供了編譯時類型安全監測機制,該機制允許程式設計師在編譯時偵測到非法的類型。泛型的本質是參數化類型,也就是說所操作的資料類型被指定為一個參數。例如我們要寫一個排序方法,能夠對整數陣列、字串陣列甚至其他任何類型的陣列進行排序,我們就可以使用Java泛型。
1.泛型方法
你可以寫一個泛型方法,該方法在呼叫時可以接收不同類型的參數。根據傳遞給泛型方法的參數類型,編譯器適當地處理每一個方法呼叫。
// 泛型方法 printArray public static < E > void printArray( E[] inputArray ) { for ( E element : inputArray ){ System.out.printf( "%s ", element ); } }
1)<? extend T> 表示該通配符所代表的型別是T型別的子類別。
2) super T> 表示該通配符所代表的型別是T型別的父類別。
2.泛型類別
泛型類別的宣告和非泛型類別的宣告類似,除了在類別名稱後面加上類型參數聲明部分。和泛型方法一樣,泛型類別的型別參數宣告部分也包含一個或多個型別參數,參數間以逗號隔開。一個泛型參數,也被稱為一個類型變量,是用來指定一個泛型類型名稱的識別碼。因為它們接受一個或多個參數,這些類別被稱為參數化的類別或參數化的類型。
public class Box<T> { private T t; public void add(T t) { this.t = t; } public T get() { return t; }
3.類型擦除
Java中的泛型基本上都是在編譯器這個層次來實現的。在產生的Java字節碼中是不包含泛型中的類型資訊的。 使用泛型時加上的型別參數,會被編譯器在編譯時去掉,這個過程就稱為型別擦除。 如程式碼中定義的List
本文來自 java入門 欄目,歡迎學習!
#以上是深入學習java之泛型的詳細內容。更多資訊請關注PHP中文網其他相關文章!