泛型的通配符
当使用泛型类或者泛型接口,传递的数据中,泛型的类型不确定,可以通过通
配符<?>表示。一旦程序使用了泛型的通配符后,只能使用Object类中的共性的
方法,集合中自身元素的方法无法使用。
通配符的基本使用
泛型的通配符:不知道使用什么类型来接受的时候,此时可以使用’?'代表未知
的通配符。
此时只能接受数据,不能往该集合当中存储数据。
备注:泛型不存在继承关系 Collection list = new ArrayList();错误写法
通配符的高级用法——
泛型的上限
- 格式:? extends E
- 意义:只能接受该类类型及其子类类型
泛型的下限
- 格式:? super E
- 意义:只能接受该类类型及其父类类型
//初始化集合
public class Demo01Generic {
/*
?:代表任意数据类型
泛型的上限限定: ? extends E 代表使用的泛型只能是E类型或者E类型的子类类型
泛型的下限限定: ? super E 代表使用的泛型只能是E类型或者E类型的父类类型
*/
public static void main(String[] args) {
Collection<Integer> coll1 = new ArrayList<>();
Collection<String> coll2 = new ArrayList<>();
Collection<Number> coll3 = new ArrayList<>();
Collection<Object> coll4 = new ArrayList<>();
getElement2(coll1);
getElement3(coll4);
}
//接受任意类型
public static void getElement1(Collection<?> coll) {
//
Iterator iterator = coll.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println(obj);
}
}
//定义使用泛型的上限 只能接受Number数字类型及其子类
public static void getElement2(Collection<? extends Number> coll) {}
//定义使用泛型的下限 只能接受Number数字类型及其父类
public static void getElement3(Collection<? super Number> coll) { }
}