学习泛型的学习笔记
一、泛型定义
- 泛型:用”<>”括住的被称为泛型
- 泛型类似于标签,规定了该类/方法使用哪种类型的数据,自带数据检测
二、在集合中使用泛型
1 | ArrayList<Integer> list = new ArrayList<Integer>(); |
- 总结:
- (1)集合接口在JDK5.0时修改为带泛型的结构
- (2)在实例化集合类时,可以指明具体的泛型类型
- (3)指明完以后,在集合类或接口中凡是定义类或接口(比如:方法、构造器、属性等)使用泛型的位置,都指定为实例化的泛型类型。
- 比如:add(E e) —> 实例化以后:add(Integer e)
- (4)注意点:泛型实例的类型必须是类,不能是基本数据类型。需要使用时,可以使用其包装类
- (5)如果实例化没有指定泛型的类型,默认使用Object类型
三、自定义泛型结构
3.1 定义泛型类 / 泛型接口
1 | class Order<T>{//定义泛型 |
- 注意:
- (1)泛型类可以有多个参数,<E1, E2, E3>
- (2)泛型不同的引用不能相互赋值
- (3)JDK7.0简化泛型操作:
ArrayList<String> list = new ArrayList<>();
- (4)异常类不能声明为泛型类
- (5)要用泛型声明数组:
T[] arr = (T[]) new Object[10];
,不能直接new,因为泛型并不是真正意义上的类 - (6)类中的带泛型的方法不能声明为static
- (7)子类继承带泛型的父类时,若指明了泛型类型。在子类实例化时不需要指明泛型
3.2 泛型方法
- 定义:泛型方法,在方法中出现泛型的结构,泛型参数与类的泛型参数没有关系
1 | 一、泛型做方法的参数 |
- 注意:
- 泛型方法可以声明为static
四、泛型在继承上的体现
1 | Object obj = null; |
- 类A是类B的父类,
G<A>
和G<B>
二者不具备子父类关系,二者是并列关系 - 类A是类B的父类,
A<G>
和B<G>
仍然是子父类关系
五、通配符
5.1 通配符使用
1 | List<Object> list1 = null; |
- 通配符:’?’
- 虽然类A是类B的父类,但是
G<A>
和G<B>
并没有关系,二者共同的父类时:G<?>
5.2 有限制条件的通配符使用
1 | //[Student < Person < Object] |