首頁  >  文章  >  Java  >  深入學習java之泛型

深入學習java之泛型

青灯夜游
青灯夜游轉載
2019-11-27 18:11:471771瀏覽

深入學習java之泛型

概念:泛型,即「參數化類型」。就是將原來具體的型別參數化,類似方法中的變數參數,此時型別也定義成參數形式(可以稱之為型別形參),然後在使用/呼叫時傳入具體的型別(型別實參)。

本質:為了參數化類型(在不建立新的類型的情況下,透過泛型指定的不同類型來控制形參具體限制的類型)。也就是說在泛型使用過程中,操作的資料型別被指定為一個參數,這種參數型別可以用在類別、介面和方法中,分別稱為泛型類別、泛型介面、泛型方法。

三種使用方式:泛型類別、泛型介面、泛型方法

類型通配符:

1 )型別通配符一般是使用?代替具體的類型參數。例如List 在邏輯上是List,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) 表示該通配符所代表的型別是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和List等類型,在編譯之後都會變成List。 JVM看到的只是List,而由泛型附加的類型資訊對JVM來說時不可見的。 類型擦除的基本過程也比較簡單,第一次是找到用來取代型別參數的具體類,這個具體類一般是Object。如果指定了類型參數的上界的話,則使用這個上界,把程式碼中的型別參數都替換成具體類別。

本文來自 java入門 欄目,歡迎學習!

#

以上是深入學習java之泛型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除