8.Java泛型

8.Java泛型

1.泛型在集合中的使用(掌握)

2.自定義泛型類、泛型接口、泛型方法(理解 --->使用)

3.泛型與繼承的關係

4.通配符

1.在集合中不使用泛型

public void test1(){

List list = new ArrayList();

list.add(89);

list.add(87);

list.add(67);

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

list.add(new String("AA"));

for(int i = 0;i < list.size();i++){

//2.強轉為int型時,可能報ClassCastException的異常

int score = (Integer)list.get(i);

System.out.println(score);

}

}

2.在集合中使用了泛型

public void test2(){

List<integer> list = new ArrayList<integer>();/<integer>/<integer>

list.add(78);

list.add(87);

// list.add("AA");

// for(int i = 0;i < list.size();i++){

// int score = list.get(i);

// System.out.println(score);

// }

Iterator<integer> it = list.iterator();/<integer>

while(it.hasNext()){

System.out.println(it.next());

}

}

public void test3(){

Map<string> map = new HashMap<>();/<string>

map.put("AA", 78);

map.put("BB", 87);

map.put("DD", 98);

Set<map.entry>> set = map.entrySet();/<map.entry>

for(Map.Entry<string> o : set){/<string>

System.out.println(o.getKey() + "--->" + o.getValue());

}

}

3.自定義泛型類:應用

public class DAO

{

public void add(T t){

//....

}

public T get(int index){

return null;

}

public List getForList(int index){

return null;

}

public void delete(int index){

}

}

public class CustomerDAO extends DAO<customer>{/<customer>

}

public class TestCustomerDAO {

public static void main(String[] args) {

CustomerDAO c = new CustomerDAO();

c.add(new Customer());

c.get(0);

}

}

【注意點】

1.對象實例化時不指定泛型,默認為:Object。

2.泛型不同的引用不能相互賦值。

3.加入集合中的對象類型必須與指定的泛型類型一致。

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

5.如果泛型類是一個接口或抽象類,則不可創建泛型

類的對象。

6.不能在catch中使用泛型

7.從泛型類派生子類,泛型類型需具體化

4.泛型與繼承的關係

A類是B類的子類,G是帶泛型聲明的類或接口。那麼G

5.通配符:?

A類是B類的子類,G是帶泛型聲明的類或接口。則G> 是G

①以List>為例,能讀取其中的數據。因為不管存儲的是什麼類型的元素,其一定是Object類的或其子類的。

①以List>為例,不可以向其中寫入數據。因為沒有指明可以存放到其中的元素的類型!唯一例外的是:null

6*. List :可以將List

? super A:可以將List


分享到:


相關文章: