清华学霸首次分享!Java泛型全解宝典限时领取( 二 )
文章图片
当实现泛型接口的类 , 未传入泛型实参时:
文章图片
当实现泛型接口的类 , 传入泛型实参时:
文章图片
3.泛型方法
泛型类 , 是在实例化类的时候指明泛型的具体类型;泛型方法 , 是在调用方法的时候指明泛型的具体类型 。
假设需要实现这样一个方法:该方法负责将一个Object数组的所有元素添加到一个Collection集合中 。 考虑采用如下代码来实现该方法:
文章图片
上面定义的方法没有任何问题 , 关键在于方法中的c参数 , 它的数据类型是Collection 。 正如前面介绍的 , Collection不是Collection的子类型—所以这个方法的功能很有限 , 它只能将Object[]数组的元素复制到元素为Object(Object的子类不行)的Collection集合中 , 击下面代码会引起问题 。
文章图片
可见上面方法的参数类型不可以使用Collection ,
使用通配符Collection>也不行 , 因为Java不允许把对象放进一个未知类型的集合里 。
为解决这个问题 , 可以使用泛型方法 , 在声明方法时定义一个或多个类型形参 。 泛型用法格式如下:
文章图片
该泛型方法的方法签名比普通方法的方法签名多了类型形参声明 , 类型形参声明以尖括号括起来 , 多个类型形参直接以逗号( , )隔开 , 所有的类型形参声明放在方法修饰符和返回值类型之间 。
采用支持泛型的方法 , 就可以将上面的fromArrayToCollection方法改写为如下形式
文章图片
可以看到Object被替换成了T , 而且在修饰符和返回值中间加了
下面代码示范了完整用法
文章图片
上面程序调用了一个泛型方法 , 该泛型方法中定义了一个T类型形参 , 这个T类型形参就可以在该方法内当成普通类型使用 。 与接口、类声明中定义的类型参数不同的是 , 方法声明中定义的形参只能在该方法内使用 , 而接口、类声明中定义的类型形参则可以在整个接口、类中使用 。
与类 , 接口中泛型参数不同的是 , 方法中的泛型参数无须显式传入实际类型参数 , 如上面程序所示 , 当程序调用fromArrayToCollection方法时 , 无须在调用该方法前传入String、Object等类型 , 但系统依然可以知道类型参数的数据类型 , 因为编译器根据实参推断类型实参的值 , 它通常推断出最直接的类型参数 。
好啦 , 今天的文章就到这里了 , 希望能够帮助到屏幕前迷茫的你们
- 芯片|高通再见,iPhone将全部采用自研发芯片:2023年首次实现
- 华为|业界首次:中国联通携手华为 5G 超级上行实现“跨站”规模商用
- 人脸识别|3位清华学霸,手握1400多科研人员,3年烧钱142.5亿,却没挣到钱
- 小米科技|曲面屏+无线充电,小米10S首次降至1909元,网友:真香!
- iPhone屏下Face ID/Touch ID爆料汇总:最早在2023年首次发布
- 攫取大众目光!商用清洁机器人“CC1”首次海外亮相CES展会
- 360刷新人工智能“世界最强”榜单,中国数字安全企业首次登顶
- |天文学家首次目睹恒星爆炸的“狂暴模样”
- “加捻”是把原料丝绕成线的过程|清华大学杨忠强课题组开发液晶弹性体加捻纤维,首次用于构筑旋转微引擎
- 1月12日|电子科技大学首次在高温超导体中发现玻色子奇异金属