個人博客網:https://wushaopei.github.io/ (你想要這裏多有)
1、泛型在集合中的使用
1.1 在集合中使用泛型之前的例子
爲什麼要有泛型(Generic)?
1. 解決元素存儲的安全性問題
2. 解決獲取數據元素時,需要類型強轉的問題
1.2 在集合中使用泛型例子1
List<String> list = new ArrayList<String>();
list.add("aaaa");
List<Integer> list2 = new ArrayList<Integer>();
list2.add(1111);
1.3 在集合中使用泛型例子2
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("aaa", 20);
體會:使用泛型的主要優點是能夠在編譯時而不是在運行時檢測錯誤。
2、自定義泛型類,泛型接口,泛型方法
2.1 自定義泛型類
public class Women<T> {
T t;
}
思考?如何讓子類指明父類的泛型類型
當子類繼承父類時,可以直接指明父類的泛型類型,那麼子類就不用再聲明泛型的類型了
public class Women extends Creature<String> {}
當子類繼承父類時,不直接指明父類的泛型類型,那麼子類就必須聲明泛型的類型
public class Women<T> extends Creature<T> {}
2.2 自定義泛型接口
public interface Buy<T> {
public void setT(T t);
}
2.3 自定義泛型方法
public <E> E setE(E e){
return e;
}
說明:泛型方法可以使用static修飾
3、 泛型與繼承
示例:
public void testGenericAndSubClass() {
Person[] persons = null;
Man[] mans = null;
// 而 Person[] 是 Man[] 的父類.
persons = mans;
Person p = mans[0];
// 在泛型的集合上
List<Person> personList = null;
List<Man> manList = null;
// personList = manList;(報錯)
}
4、 通配符 - ?
4.1通配符的使用說明:
說明: <?>是所有泛型類型的父類
讀取數據:使用通配符泛型的集合能讀取數據。
存數據 : 只能存儲null
4.2 通配符的限制說明:
<? extends Number> (無窮小 , Number]
只允許泛型爲Number及Number子類的引用調用
<? super Number> [Number , 無窮大)
只允許泛型爲Number及Number父類的引用調用
<? extends Comparable>
只允許泛型爲實現Comparable接口的實現類的引用調用