泛型 本節要點: 1 泛型類是帶有一個或者多個類型的參數的類。 2 泛型方法是帶有類型參數的方法。 3 你可以要求類型參數必須是一個或者多個類型的子類型。 4 泛型類型是不變的,當S是T的子類是 G<S>和G<T>沒有關係。 5 通過使用通配符G<? extends T> 或者 G<> super ...
泛型
本節要點:
- 1 泛型類是帶有一個或者多個類型的參數的類。
- 2 泛型方法是帶有類型參數的方法。
- 3 你可以要求類型參數必須是一個或者多個類型的子類型。
- 4 泛型類型是不變的,當S是T的子類是 G<S>和G<T>沒有關係。
- 5 通過使用通配符G<? extends T> 或者 G<> super T> 你可以制定一個方法接受一個帶有子類或者父類參數的泛型類型的實例。
- 6 當泛型類和泛型方法被編譯時,類型參數會被擦除。
- 7 類型擦除對泛型諸多限制,特別是,你不能實例化泛型類或者數組,不能轉換成泛型類型,或者拋出一個泛型類的對象。
- 8 Class<T> 是一個泛型類,他非常有用,因為諸如newInstance這樣的方法被申明為一個T類型的值。
- 9 即使泛型類和方法在虛擬機中被擦除,你也可以在運行時找出他們是如何申明的。
1 .泛型類
/** * 泛型類是有一個或者多個類型參數的類 * @author gaolei **/ public class Entry<K,V> { private K key; private V value; public Entry(K key, V value) { this.key = key; this.value = value; } public K getKey() { return key; } public V getValue() { return value; } }
正如你看到的那樣,類名之後的尖括弧中指定了類型參數K和V,在類成員的定義中,他們被用作實例變數的類型、方法的參數和返回值的類型。
構造一個泛型類的對象是 例如 Entry<String ,Integer> entry = new Entry<>("1",2); 等同new Entry<String ,Integer>("1",2),註意類型參數不能用基本數據類型實例化。
2.泛型方法
/** * @author GAOLEI **/ public class Arrays { /** * 泛型方法是一個帶有類型參數的方法 泛型方法可以是普通類或者泛型類 * @param arr 數組 * @param i 下標i * @param j 下標j * @param <T> 類型T */ public static <T> void swap(T[] arr,int i,int j){ T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }
swap方法可以交換任何數組中的元素(只要數組中的元素類型不是基本數據類型),
public static void main(String[] args) { String [] arr = {"1","2"}; //<String> 非必須 Arrays.<String>swap(arr,0,1); for (String s : arr) { System.out.println(s); } }
通過上面的例子你是否已經感受到泛型是如此的有用。
------------------------題外話--------------------------------
圖片來源於網路
說不上愛別說謊就一點喜歡
說不上恨別糾纏別裝作感嘆
就當作我太麻煩不停讓自己受傷
我告訴我自己感情就是這樣
怎麼一不小心太瘋狂
抱一抱再好好覺悟不能長久
好不好有虧欠我們都別追究
算了吧我付出再多都不足夠
每當聽到這首說散就散筆者內省總會掀起波瀾久久不能平靜,不知道那些年錯過的她們現在過得怎麼樣了,想想小時候還是太天真,哎。。。 在這裡筆者希望有情人都能成眷屬,沒能在一起也要讓他轟轟烈烈。當然說了這麼多的前提是先有個女朋友
以上內容僅代表作者個人觀點,有不恰當希望指正更改
Copyright 2018-1-7 by 風一樣的男子