清华学霸首次分享!Java泛型全解宝典限时领取( 二 )


文章图片
当实现泛型接口的类 , 未传入泛型实参时:
清华学霸首次分享!Java泛型全解宝典限时领取
文章图片
当实现泛型接口的类 , 传入泛型实参时:
清华学霸首次分享!Java泛型全解宝典限时领取
文章图片
3.泛型方法
泛型类 , 是在实例化类的时候指明泛型的具体类型;泛型方法 , 是在调用方法的时候指明泛型的具体类型 。
假设需要实现这样一个方法:该方法负责将一个Object数组的所有元素添加到一个Collection集合中 。 考虑采用如下代码来实现该方法:
清华学霸首次分享!Java泛型全解宝典限时领取
文章图片
上面定义的方法没有任何问题 , 关键在于方法中的c参数 , 它的数据类型是Collection 。 正如前面介绍的 , Collection不是Collection的子类型—所以这个方法的功能很有限 , 它只能将Object[]数组的元素复制到元素为Object(Object的子类不行)的Collection集合中 , 击下面代码会引起问题 。
清华学霸首次分享!Java泛型全解宝典限时领取
文章图片
可见上面方法的参数类型不可以使用Collection ,
使用通配符Collection>也不行 , 因为Java不允许把对象放进一个未知类型的集合里 。
为解决这个问题 , 可以使用泛型方法 , 在声明方法时定义一个或多个类型形参 。 泛型用法格式如下:
清华学霸首次分享!Java泛型全解宝典限时领取
文章图片
该泛型方法的方法签名比普通方法的方法签名多了类型形参声明 , 类型形参声明以尖括号括起来 , 多个类型形参直接以逗号( , )隔开 , 所有的类型形参声明放在方法修饰符和返回值类型之间 。
采用支持泛型的方法 , 就可以将上面的fromArrayToCollection方法改写为如下形式
清华学霸首次分享!Java泛型全解宝典限时领取
文章图片
可以看到Object被替换成了T , 而且在修饰符和返回值中间加了
下面代码示范了完整用法
清华学霸首次分享!Java泛型全解宝典限时领取
文章图片
上面程序调用了一个泛型方法 , 该泛型方法中定义了一个T类型形参 , 这个T类型形参就可以在该方法内当成普通类型使用 。 与接口、类声明中定义的类型参数不同的是 , 方法声明中定义的形参只能在该方法内使用 , 而接口、类声明中定义的类型形参则可以在整个接口、类中使用 。
与类 , 接口中泛型参数不同的是 , 方法中的泛型参数无须显式传入实际类型参数 , 如上面程序所示 , 当程序调用fromArrayToCollection方法时 , 无须在调用该方法前传入String、Object等类型 , 但系统依然可以知道类型参数的数据类型 , 因为编译器根据实参推断类型实参的值 , 它通常推断出最直接的类型参数 。
好啦 , 今天的文章就到这里了 , 希望能够帮助到屏幕前迷茫的你们