21天精通java基礎之Day14泛型

Day14:泛型

  不使用泛型的危害:

1.不使用泛型,任何Object及其子類的對象都可以添加進來。

2.強轉爲int型時,可能報ClassCastException的異常。

 泛型的使用:

1.在集合中使用:

@Test
public void test()
{
	List<Integer> list=new ArrayList<Integer>();
	list.add(88);
	list.add(98);
	
	Iterator<Integer> iterator = list.iterator();
	while(iterator.hasNext())
	{
		System.out.println(iterator.next());
	}
}

public void test2()
{
	Map<String, Integer> m1 = new HashMap<String,Integer>();
	m1.put("ss", 78);
	m1.put("BB", 33);
	m1.put("BS", 34);
	
	Set<Map.Entry<String, Integer>> set = m1.entrySet();
	for(Map.Entry<String, Integer> o:set)
	{
		System.out.println(o.getKey() + "---" + o.getValue());
	}
}


2.自定義泛型類、泛型接口、泛型方法:

當實例化泛型類的對象時,指明泛型的類型。指明以後,對應的類所有使用泛型的位置,都變爲實例化中指定的泛型的類型。

②如果自定義了泛型類,但是在實例化時沒有使用,那麼默認類型就是Object。

3.泛型與繼承的關係:

①繼承泛型類或泛型接口時,可以指明泛型的類型。

②若A是類B的子類,那麼List<A>就不是List<B>的子接口。

4.通配符:?

List<A>、List<B>...都是List<?>的子類。

? extends A :可以存放A及其子類。

? super A:可以存放A及其父類。

@Test
public void test4()
{
	List<String> list = new ArrayList<>();
	list.add("AA");
	list.add("BB");
	List<?> list1 = new ArrayList<>();
	list1 = list;
	
	//可以讀取聲明爲通配符的集合類的對象
	Iterator<?> iterator = list1.iterator();
	while(iterator.hasNext())
	{
		System.out.println(iterator.next());
	}
	//不允許向聲明爲通配符的集合類中寫入對象,只能存null
//	list1.add("cc");
//	list1.add(123);
}



對於泛型類:

①靜態方法中不能使用類的泛型。

②如果泛型類一個接口或者抽象類,則不能創建類的對象。

③不能在catch中使用泛型。

④從泛型類派生子類,泛型類型需要具體化。

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