只能用于声明变量|形参上,一般是形参类型上,表示可以接收任意
不能用在
1、创建对象,即new 后面
2、声明泛型类、泛型接口,即class和interface
3、声明泛型方法,即返回值类型前面<>中
匹配任意类型的通配符
受限泛型:上限、下限
(1)通配符指定上限
上限extends:使用时指定的类型必须是继承某个类,或者实现某个接口,即<= ,如
? extends Person
? extends Comparable
满足以下规则
List 满足 List<? extends Fruit>
List 满足 List<? extends Fruit>
List 满足 List<? extends Fruit>
List<? extends Apple> 满足 List<? extends Fruit>
List<?> 不满足 List<? extends Fruit> 因为List<?> 等价于List<? extends Object>
如果使用“? extends 类型”接收泛型对象的时候,则不能设置被泛型指定的内容
(2)通配符指定下限
下限super:使用时指定的类型不能小于操作的类,即>=,如
? super Apple
存在以下规则:
ArrayList 满足 ArrayList<? super Apple>
ArrayList 满足 ArrayList<? super Apple>
ArrayList 满足 ArrayList<? super Apple>
ArrayList<? super Apple> 满足 ArrayList<? super Apple>
ArrayList<? super Fruit> 满足 ArrayList<? super Apple>
ArrayList<?> 不满足 ArrayList<? super Apple>因为List<?> 等价于List<? extends Object>,那么可能ArrayList
ArrayList<? super FujiApple> 不满足 ArrayList<? super Apple> 因为可能ArrayList< FujiApple>
如果使用“? super类型”接收泛型对象的时候,则能够添加数据,但是不能添加父对象