第八章 泛型
1.泛型在集合中的使用
2.自定义泛型类、泛型接口、反省方法
3.泛型与继承的关系
4.通配符
1.在集合中不使用泛型
①没使用泛型,任何Object以及其子类的对象都可以添加集合
②强转数据类型时,可能会出现ClassCastException的异常
2.在集合中使用泛型
例:
public void test(){
List<Interger>list = new ArrayList<Integer>();
list.add(66);
list.add(88);
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
public void test1(){
Map<String,Integer> map = new HashMap<>();
map.put("AA",88);
map.put("BB",66);
map.put("CC",77);
Set<Map.Entry<String.Integer>> set = map.entrySet();
for(Map.Entry<String.Integer> o : set){
System.out.println(o.getKey+o.getValue());
}
}
3.自定义泛型类
注意点:
1.对象实例化时不指定泛型,默认为:Object
2.泛型不同的引用不能相互赋值
3.加入集合中的对象类型必须与指定的泛型类型一致
4.如果泛型类是一个接口或抽象类,则不可创建泛型类的对象
6.不能再catch中使用泛型
7.从泛型类派生子类,泛型类型需具体化
4.泛型与继承的关系
A类是B类的子类,G是带泛型声明的类或接口,那么G<A>不是G<B>的子类
5.通配符
A类是B类的子类,G是带泛型声明的类或接口,则G<?>是G<A>、G<B>的父类
①以List<?>为例,能读取其中的数据,因为不管储存的是什么类型的元素,其一定是Object类的或者其子类
②以List<?>为例,不可以向其中写入数据,因为没有指明可以存放到其中的元素的类型,唯一例外是:null
6.List< ? extends A> :可以将List<A>的对象或List<B>的对象赋给List< ? extends A>。其中B是A的子类
?super A:可以将List<A>的对象或List<B>的对象赋给List< ? extends A> ,其中B是A的父类。
本文出自 “阿成的博客” 博客,转载请与作者联系!