- 类型通配符> 一般用于接受使用,不能够做添加
- List>:表示元素类型未知的list,它的元素可以匹配任何类型
- 带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
- 类型通配符上限: extend 类型> List extends MayiktParent>:它表示的类型是MayiktParent或子类型
- 类型通配符下限: super 类型> List super MayiktParent>:它表示的类型是MayiktParent或者其父类型
- package com.collection.Demo06;
-
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
-
- public class Test02 {
- public static void main(String[] args) {
- ArrayList
arrayListString = new ArrayList<>(); - for (int i = 0; i < 5; i++) {
- arrayListString.add("i:" + i);
- }
- ArrayList
arrayListInteger = new ArrayList<>(); - printList(arrayListString);
- printList(arrayListInteger);
-
- List> arrayList = new ArrayList<>();
- // arrayList.add("fsd");//报错,不能添加
- }
- //参数List类型的泛型,明确String类型
- // public static void printList(List
stringList){} -
-
- /**
- * 如果不明确参数List类型的泛型是什么类型,可以使用>
- * List> 只能用于接收,可以接收所有类型的泛型类型,但不能用于添加
- */
- public static void printList(List> stringList) {
- // stringList.add("mayilt");//报错,不能用于添加,∵类型不明确,没法添加
- // Object o = stringList.get(0);//不能添加,但可以get,类型是Object
- Iterator> iterator = stringList.iterator();
- while (iterator.hasNext()) {
- System.out.println(iterator.next());
- }
- }
- }
MayiktParent.java 父类
- package com.collection.Demo06;
-
- public class MayiktParent {
- }
Student.java 子类
- package com.collection.Demo06;
-
- public class Student extends MayiktParent{
- }
Test03.java 测试
- package com.collection.Demo06;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class Test03 {
- public static void main(String[] args) {
- List
mayiktParents = new ArrayList<>(); - List
students = new ArrayList<>(); - List
integers = new ArrayList<>(); - List
- printList1(mayiktParents);//上限
- printList1(students);//上限
- // printList1(integers);//报错,∵ integer与MayiktParent没有任何关系
- // printList1(objects);//报错,只能是MayiktParent与它的子类
-
- printList2(mayiktParents); //下限
- printList2(objects);//下限——父类
- // printList2(students);//报错
- // printList2(integers);//报错
-
- printList3(mayiktParents);
- printList3(students);
- printList3(objects);
- // printList3(integers);//报错
-
- }
-
- /**
- * 问题: List> 接收所有类型,如何限制?
- * 解决: 类型通配符 上限 和 下限
- * 上限: extend 类型> List extends MayiktParent>:它表示的类型是MayiktParent或子类型
- * 下限: super 类型> List super MayiktParent>:它表示的类型是MayiktParent或者其父类型
- */
- //List extends MayiktParent> 只能接收MayiktParent 和它的子类
- public static void printList1(List extends MayiktParent> list) { //上限
- }
-
- //List super MayiktParent> 只能接收MayiktParent 和它的父类
- public static void printList2(List super MayiktParent> list) { //下限
- }
-
- //如果想是使用super让可以接收mayiktParents和students
- public static void printList3(List super Student> list) { //下限
- }
- }
下一篇文章:可变参数