在java泛型中,? 表示通配符,代表未知类型,< ? extends Object>表示上边界限定通配符,< ? super Object>表示下边界限定通配符。
实例化泛型对象,我们不能够确定eList存储的数据类型是Integer还是Long,因此我们使用List< ? extends Number>定义变量的类型。
List< ? extends Number > eList = null;
eList = new ArrayList<Integer>();
eList = new ArrayList<Long>();
上界类型通配符(? extends)
<=
下界类型通配符(? super )
>=
总结
- 限定通配符总是包括自己
- 上界类型通配符:add方法受限
- 下界类型通配符:get方法受限
- 如果你想从一个数据类型里获取数据,使用 ? extends 通配符
- 如果你想把对象写入一个数据结构里,使用 ? super 通配符
- 如果你既想存,又想取,那就别用通配符
- 不能同时声明泛型通配符上界和下界