1. 为什么要有泛型
1). 解决元素存储的安全性问题
2). 解决获取数据元素时,需要类型强转的问题
2.自定义泛型
1). 当实例化泛型类的对象时,指明泛型的类型。指明以后,对应的类中所有使用泛型的位置,都变为实例化中指定的泛型的类
2). 如果我们自定义了泛型类,但是在实例化时没有使用,那么默认类型是Object类的
3). 声明泛型方法
public static <E> E getE(E e){
return e;
}
3. 泛型继承关系:若类A是类B的子类,那么List<A>就不是List<B>的子接口
4. 泛型通配符:?
1). List<A>、List<B>、。。。。都是List<?>的子类
public void show1(List<?> list){
}
2). ? extends A :可以存放A及其子类
3). ? super A:可以存放A及其父类
5. 注意的地方:
1). 不可以在static方法中使用泛型的声明
2). 不可以在try-catch中使用类的泛型的声明
3). 可以读取声明为通配符的集合类的对象
4). 不允许向声明为通配符的集合类中写入对象。唯一例外的是null