JAVASE(十五) 泛型 :泛型用例、自定義泛型類、通配符

個人博客網: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接口的實現類的引用調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章