F 泛型
F. 1 泛型概述
F.1.1 什么是泛型
所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实际的类型参数,也称为类型实参)。
泛型的类型不能是基本数据类型,用包装类代替
如果实例化时,没有指明泛型的类型。默认类型为java.lang.object类型。
F.1.2 为什么要有泛型
案例1:不使用泛型
案例2:使用泛型
Iterator源码:
案例3: Map的泛型
Map源码:
map的put方法使用类定义的泛型
Entry的使用情况:
因为Entry接口定义在Map接口内部,所以在使用时的导包有两种情况
情况1: Map.Entry
导包
使用
情况2:Entry
导包
使用
F.2 自定义泛型类
可以参考Map源码
新建一个类:
子类继承泛型类
情况一
由于子类在继承带泛型的父类时,指明了泛型类型。则实例化子类对象时,不再需要指明泛型。
情况二
参考ArrayList源码
F.3 总结![在这里插入图片描述](https://img-blog.csdnimg.cn/c2d42815ed4b470ea5c42c560610aa0c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcGVwcGFjYXR0,size_20,color_FFFFFF,t_70,g_se,x_16)
9.类的泛型是实例化的时候指定的,而static要早于对象的创建,所以静态方法中不能使用类的泛型
10
11
12
F.4 自定义泛型方法
参考Collection源码:
toArray就是泛型方法
Collection泛型为E
toArray定义了T
方法所属的类或者接口是否带泛型无所谓
自定义一个泛型方法
F.5 泛型在继承方面的体现
F.6 通配符(?)的使用
有限制条件的通配符的使用
新建类
extends可以看做<=
super可以看做>=