java培训课程SE进阶之泛型通配符

  • 只能用于声明变量|形参上,一般是形参类型上,表示可以接收任意
  • 不能用在
    • 1、创建对象,即new 后面
    • 2、声明泛型类、泛型接口,即class和interface
    • 3、声明泛型方法,即返回值类型前面<>中

1、匹配任意类型的通配符

java培训中心

2、受限泛型:上限、下限

(1)通配符指定上限

上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<= ,如

  • ? extends Person
  • ? extends Comparable

满足以下规则

  • List<Fruit> 满足 List<? extends Fruit>
  • List<Apple> 满足 List<? extends Fruit>
  • List<FujiApple> 满足 List<? extends Fruit>
  • List<? extends Apple> 满足 List<? extends Fruit>
  • List<?> 不满足 List<? extends Fruit> 因为List<?> 等价于List<? extends Object>

java培训中心

如果使用“? extends  类型”接收泛型对象的时候,则不能设置被泛型指定的内容

java培训中心

(2)通配符指定下限

下限super:使用时指定的类型不能小于操作的类,即>=,如

? super Apple

存在以下规则:

  • ArrayList<Apple> 满足 ArrayList<? super Apple>
  • ArrayList<Fruit> 满足 ArrayList<? super Apple>
  • ArrayList<Object> 满足 ArrayList<? super Apple>
  • ArrayList<? super Apple> 满足 ArrayList<? super Apple>
  • ArrayList<? super Fruit> 满足 ArrayList<? super Apple>
  • ArrayList<?> 不满足 ArrayList<? super Apple>因为List<?> 等价于List<? extends Object>,那么可能ArrayList<String>
  • ArrayList<? super FujiApple> 不满足 ArrayList<? super Apple> 因为可能ArrayList< FujiApple>

java培训中心

如果使用“? super类型”接收泛型对象的时候,则能够添加数据,但是不能添加父对象

java培训中心


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)