目录
一、类型通配符
1.什么是类型通配符:
当声明一个方法时,某个形参的类型是一个泛型类或泛型接口类型,但是在声明方法时,又不确定该泛型实际类型,可以考虑使用类型通配符
2.为了表示各种泛型List的父类,可以使用类型通配符
- 类型通配符:<?>
- List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型
- 这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
3.通配符的上下限
- 类型通配符的上限:<? extends 类型>
- 示例:List<? extends Number> :它表示的类型是Number或者其子类型
- 类型通配符的下限:<? super 类型>
- 示例:List<? super Number>:它表示的类型是Number或者其父类型
代码示例:
(1)类型通配符的使用:
/*一、类型通配符
1.什么是类型通配符:
当声明一个方法时,某个形参的类型是一个泛型类或泛型接口类型,但是在声明方法时,又不确定该泛型实际类型,可以考虑使用类型通配符
类型通配符:<?>
List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型
这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
*/
public class myGenericDemo_04 {
public static void main(String[] args) {
ArrayList<String> list1 = new ArrayList<>();//这个类型是String类型
ArrayList<Integer> list2 = new ArrayList<>();//这个类型是Integer类型
//当调用方法时,不确定到底写哪种类型,这时就用到了类型通配符
printList(list1);
printList(list2);
}
//传入参数(ArrayList<?> list)
private static void printList(ArrayList<?> list) {
}
}
(2)类型通配符的上下限:
public class myGenericDemo_05 {
public static void main(String[] args) {
//类型通配符
List<?> list1 = new ArrayList<Object>();
List<?> list2 = new ArrayList<Number>();
List<?> list3 = new ArrayList<Integer>();
System.out.println("-------------");
//类型通配符的上限(这里上限类型是Number,所以可使用的类型是Number或其子类)
List<? extends Number> list4 = new ArrayList<Number>();
List<? extends Number> list5 = new ArrayList<Integer>();
//类型通配符的下限(这里下限类型是Number,所以可使用的类型是Number或其父类)
List<? super Number> list6 = new ArrayList<Object>();
List<? super Number> list7 = new ArrayList<Number>();
}
}