类型通配符
为了表示各种泛型List的父类,可以使用类型通配符
类型通配符:<?> List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型 这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
如果说我们不希望List<?>是任何类型List的父类,只希望它代表某一类泛型List的父类,可以使用类型通配符的上限 1、类型通配符上限:<?extends 类型> 2、List<? extends Number>:表示的类型是Number或者其子类型。注意不能表示Number的父类型,因为这行做了上限的限定
除了可以指定类型通配符的上限,我们也可以指定类型通配符的下限,如下 1、类型通配符下限:<?super 类型> 2、List<? super Number>:表示的类型是Number或者其父类型。注意不能表示Number的子类型,因为这行做了下限的限定
类型通配符的练习
xxxxxxxxxx
package ch16;
import java.util.ArrayList;
import java.util.List;
//这节课不需要运行哦
public class a_5_1测试 {
public static void main(String[] args) {
//为了下面更好理解上限和下限,我们可以简单理解为父类和子类。列举几个常用的:Object>Number>Integer。即Object是Integer的爷
//类型通配符:<?>
List<?> list1 = new ArrayList<Object>(); //右边的<>可以是任意类型
List<?> list2 = new ArrayList<Number>();
List<?> list3 = new ArrayList<Integer>();
//类型通配符的上限
//List<? extends Number> list4 = new ArrayList<Object>(); //右边的<>不能超过Number类,否则比如Object类就会报错
List<? extends Number> list5 = new ArrayList<Number>(); //可以是同级的类型
List<? extends Number> list6 = new ArrayList<Integer>(); //也可以比左边的Number小的类型
//类型通配符的下限
//List<? super Number> list7 = new ArrayList<Integer>(); //右边的<>不能低于Number类,否则比如Integer类就会报错
List<? super Number> list8 = new ArrayList<Number>(); //可以是同级的类型
List<? super Number> list9 = new ArrayList<Object>(); //也可以比左边的Number大的类型
}
}