第十章 泛型
1. 为什么要有泛型
- 指定集合里边只能装某种数据类型
- 编译时就会进行检查,防止类型错误
- 异常类不能是泛型
2.泛型使用范例
public class DAO<T>{
//表的共用操作
//增删改查
}
public class StudentDAO extends DAO<Student>{
//只能操作某一个表的DAO
}
- 泛型方法的使用
//当返回值类型不确定的时候可以使用泛型方法
public <E> e test(){}
3.泛型在继承方面的体现
3.1 泛型在继承方面的体现
- 类 A 是类 B 的父类,E 和 E 二者不具备子父类关系,是两个并列的结构
- 但是 A 的父类
List<Object> list = null;
List<String> li = null;
//不可以这么使用,此时的list和li不具有子父类关系
//list = li;
3.2 通配符的使用
- 通配符 ?
@Test
public void test(){
List<Object> list1 = null;
List<String> list2 = null;
List<?> list = null;
list = list1;
list = list2;
}
//List<?> 只可以添加null 其他都不可以添加
- 有限制条件的通配符
? extends A:
G<? extends A> 可以作为 G 和 G 谷类的,其中B 是 A 的子类
? super A:
G<? extends A> 可以作为 G 和 G 谷类的,其中B 是 A 的父类
public class Person{}
class Student extends Person{}
class Test{
@Test
public void test(){
List<? extends Person> list = null;
List<? super Person> list2 = null;
List<Student> s = null;
List<Person> p = null;
List<Object> o = null;
list = s;
list = p;
//不可以
//list = o;
//不可以
//list2 = s;
list2 = p;
list2 = o;
}
}