在集合中使用泛型和自定义泛型
1.使用泛型需要先定义泛型。集合接口或集合类在jdk1.5时都修改为带泛型的结构。
2.实例化集合类时,可以指明具体的泛型类型。
3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构使用到泛型的位置,都指定为实例化时的泛型类型。
4.注意点:泛型的类型必须是类,不能是基本数据类型。如果实例化时,没有指明泛型的类型,泛型对应的类型按Object处理,但不等价于Object。泛型不同的引用不能相互赋值,即便引用的泛型类型是子父类的关系。静态方法中不能使用泛型,因为泛型是在实例化对象时指定的,而静态方法随类加载,此时还没有指定泛型的类型。异常类不能声明为泛型类。
5.泛型方法:方法中出现了泛型的结构,此泛型参数与类的泛型参数没有任何关系。泛型方法可以是静态方法。因为泛型参数是在调用方法时确定的,并非实例化类时确定的。
6.虽然类A是类B的父类,A< G >是B< G >的父类。但是G< A >和G< B >二者不具备子父类关系,二者是并列关系。此特性在一定程度上限制了多态性,使用通配符“?”可以解决此问题。二者共同父类为G<?>。
7.使用通配符(限制通配符除外)的引用不能添加数据,因为无法确定数据类型,能够读取数据,读取数据类型为Object。
8.限制通配符:<? extends A>:类型为A及其子类,可读数据不可添加数据。<? super A>:类型为A及其父类,可读数据,只能添加A及其子类类型数据。