泛型

  概念:泛型,即「參數化類型」。就是將原來具體的類型參數化,相似於方法中的變量參數,此時類型也定義成參數形式(能夠稱之爲類型形參),而後在使用/調用時傳入具體的類型(類型實參)。程序員

  本質:爲了參數化類型(在不建立新的類型的狀況下,經過泛型指定的不一樣類型來控制形參具體限制的類型)。也就是說在泛型使用過程當中,操做的數據類型被指定爲一個參數,這種參數類型能夠用在類、接口和方法中,分別被稱爲泛型類、泛型接口、泛型方法。數組

  三種使用方式:泛型類、泛型接口、泛型方法安全

  類型通配符:this

    1)類型通配符通常是使用?代替具體的類型參數。例如List<?> 在邏輯上是List<String>,List<Integer>等全部List<具體類型實參>的父類。spa

    2)類型通配符上線經過形如List來定義,如此定義就是通配符泛型值接受Number及其下層子類類型。code

  

  泛型提供了編譯時類型安全監測機制,該機制容許程序員在編譯時檢測到非法的類型。泛型的本質是參數化類型,也就是說所操做的數據類型被指定爲一個參數。好比咱們要寫一個排序方法,可以對整數數組、字符串數組甚至其餘任何類型的數組進行排序,咱們就可使用Java泛型。blog

  1.泛型方法 <E>排序

    你能夠寫一個泛型方法,該方法在調用時能夠接收不一樣類型的參數。根據傳遞給泛型方法的參數類型,編譯器適當地處理每個方法調用。接口

1 // 泛型方法 printArray 
2      public static < E > void printArray( E[] inputArray ) 3  { 4          for ( E element : inputArray ){ 5              System.out.printf( "%s ", element ); 6  } 7      }

    1)<?extend T> 表示該通配符所表明的類型是T類型的子類。element

    2)<? super T> 表示該通配符所表明的類型是T類型的父類。

  2.泛型類 <T>

    泛型類的聲明和非泛型類的聲明相似,除了在類名後面添加類型參數聲明部分。和泛型方法同樣,泛型類的類型參數聲明部分也包含一個或多個類型參數,參數間用逗號隔開。一個泛型參數,也被稱爲一個類型變量,是用於指定一個泛型類型名稱的標識符。由於它們接受一個或多個參數,這些類被稱爲參數化的類或參數化的類型。

1 public class Box<T> { 2      private T t; 3      public void add(T t) { 4          this.t = t; 5  } 6      public T get() { 7          return t; 8  }

  3.類型擦除

    Java中的泛型基本上都是在編譯器這個層次來實現的。在生成的Java字節碼中是不包含泛型中的類型信息的。使用泛型時加上的類型參數,會被編譯器在編譯時去掉,這個過程就稱爲類型擦除。如在代碼中定義的List<Object>和List<String>等類型,在編譯以後都會變成List。JVM看到的只是List,而由泛型附加的類型信息對JVM來講時不可見的。類型擦除的基本過程也比較簡單,首次是找到用來替換類型參數的具體類,這個具體類通常是Object。若是指定了類型參數的上界的話,則使用這個上界,把代碼中的類型參數都替換成具體類。

相關文章
相關標籤/搜索