有勇气的牛排博客

java 泛型类型通配符

有勇气的牛排 1075 Java 2021-08-26 21:57:34

1 介绍

为了表示各种泛型List的父类,可以使用类型通配符

  • 类型通配符:< ?>

  • List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型

  • 这种带通配符的List仅表示它是各种泛型类List的父类,兵部能把元素添加到其中

如果说我们不希望List<?>是任何泛型List的父类,只希望它代表某一类泛型List的父类,可以使用类型通配符的上限

  • 类型统配父上限:< ? extends类型>

  • List< ? extends Number>:它表示的类型是Number或者其子类型

除了可以指定类型统配符的上限,我们也可以指定类型通配符的下限

  • 类型通配符下限:< ? super 类型>

  • List< ?super Number>:它表示类型是Number或者其父类型

2 代码

package itheima_05; import java.util.ArrayList; import java.util.List; public class GenericDemo { public static void main(String[] args) { // 类型通配符:<?> ArrayList<?> list1 = new ArrayList<Object>(); ArrayList<?> list2 = new ArrayList<Number>(); ArrayList<?> list3 = new ArrayList<Integer>(); System.out.println("--------"); // 类型通配符上限 // ArrayList<? extends Number> list4 = new ArrayList<Object>(); // 报错 这里达到上限 ArrayList<? extends Number> list5 = new ArrayList<Number>(); ArrayList<? extends Number> list6 = new ArrayList<Integer>(); System.out.println("--------"); // 类型通配符下限:<? super 类型> List<? super Number> list7 = new ArrayList<Object>(); List<? super Number> list8 = new ArrayList<Number>(); // List<? super Number> list9 = new ArrayList<Integer>(); // 报错 这里是下限 } }

参考地址:https://www.bilibili.com/video/BV18J411W7cE?p=254


留言

专栏
文章
加入群聊