十四泛型
在类定义的时候,其属性的类型没有指定,而是实例化对象的时候由外部来指定的情况(动态的指定数据类型)
1.定义泛型格式
[访问权限] class 类名称 <泛型类型1,泛型类型2…>
[访问权限] 泛型类型标识 变量名称
[访问权限] 泛型类型声明 方法名称(){}
2.实例化指定泛型
Class<Object,Object> object=new Class<Object,Object>();
无法指定为基本数据类型,需设置成一个类,Object为数据类型对应的包装类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HN1FnuhW-1603007736648)(C:\Users\lgm\AppData\Roaming\Typora\typora-user-images\1602987328696.png)]
3.泛型类的引用
指定泛型类的泛型类型
使用通配符?来匹配任意的类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMirJ4OB-1603007736651)(C:\Users\lgm\AppData\Roaming\Typora\typora-user-images\1602988857123.png)]
4.受限泛型
在泛型类型的定义或泛型类引用传递中(即有<T>的地方),可设置一个泛型对象的范围上线和范围下限
上限用 extends (小于或等于)关键字声明 下限用 super(大于或等于)关键字声明
设置上限
定义类 类名称<泛型标识 extends 类>{}
声明对象 类名称<? extends 类 > 对象名称
设置下限
定义类 类名称<泛型标识 super 类>{}
声明对象 类名称<? super 类 > 对象名称
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ki5hAHAu-1603007736654)(C:\Users\lgm\AppData\Roaming\Typora\typora-user-images\1602990428584.png)]
5.泛型与子类继承的限制
一个类的子类可通过多态,为父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接收
在泛型中对象类型不能转换
例:Poitn<Object> p=new Point<String>() 此时出错
使用通配符?来匹配任意泛型类型
6.泛型接口
声明
[访问权限] interface 接口名称<T>{}
子类实现
在子类实现接口中声明泛型
在子类实现接口中指定具体的泛型类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ELyMYU4V-1603007736656)(C:\Users\lgm\AppData\Roaming\Typora\typora-user-images\1602995331170.png)]
7.泛型方法
方法中引用类定义的泛型,泛型类型在类实例化时指定
[访问权限] 泛型标识(返回值类型) 方法名称 ([泛型标识 参数名称])
方法中定义泛型,泛型类型就是传入数据的类型
[访问权限] <定义泛型标识> 泛型标识(返回值类型) 方法名称 ([泛型标识 参数名称])
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKwRRno3-1603007736658)(C:\Users\lgm\AppData\Roaming\Typora\typora-user-images\1602997577479.png)]
8.泛型数组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6iNO7PK-1603007736660)(C:\Users\lgm\AppData\Roaming\Typora\typora-user-images\1603007643624.png)]