泛型的使用
泛型的好處是在編譯的時候進(jìn)行類型安全檢查眯搭,并且所有的強(qiáng)制轉(zhuǎn)換都是自動和隱式的错负,以提高代碼的重用率。
泛型有三種使用方式操禀,分別為:泛型類褂策、泛型接口、泛型方法
泛型類
泛型類的最基本寫法
class 類名稱 <泛型標(biāo)識:可以隨便寫任意標(biāo)識號颓屑,標(biāo)識指定的泛型的類型>{
private 泛型標(biāo)識 /(成員變量類型)/ var;
.....
}
}
//此處T可以隨便寫為任意標(biāo)識斤寂,常見的如T、E揪惦、K遍搞、V等形式的參數(shù)常用于表示泛型
//在實(shí)例化泛型類時,必須指定T的具體類型
public class Generic<T>{
//key這個成員變量的類型為T,T的類型由外部指定
private T key;
public Generic(T key) { //泛型構(gòu)造方法形參key的類型也為T器腋,T的類型由外部指定
this.key = key;
}
public T getKey(){ //泛型方法getKey的返回值類型為T溪猿,T的類型由外部指定
return key;
}
}
泛型方法
聲明一個泛型方法很簡單钩杰,只要在返回類型前面加上一個類似<K, V>的形式就行了
public class Util {
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) &&
p1.getValue().equals(p2.getValue());
}
}
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public void setKey(K key) { this.key = key; }
public void setValue(V value) { this.value = value; }
public K getKey() { return key; }
public V getValue() { return value; }
}
通配符
在java泛型中,诊县? 表示通配符讲弄,代表未知類型,< ? extends Object>表示上邊界限定通配符依痊,< ? super Object>表示下邊界限定通配符避除。
1, 限定通配符總是包括自己
2胸嘁,上界類型通配符:add方法受限, 不能夠確定實(shí)例化對象的具體類型瓶摆,因此無法add具體對象至列表中。
3性宏,下界類型通配符:get方法受限群井,獲取的值存在不確定性,子類對象的引用無法賦值給兄弟類的引用衔沼,父類對象的引用無法賦值給子類的引用,因此語句錯誤昔瞧。
4指蚁,如果你想從一個數(shù)據(jù)類型里獲取數(shù)據(jù),使用 ? extends 通配符
5自晰,如果你想把對象寫入一個數(shù)據(jù)結(jié)構(gòu)里凝化,使用 ? super 通配符
6,如果你既想存酬荞,又想取搓劫,那就別用通配符
7,不能同時聲明泛型通配符上界和下界