通配符

【通配符】一.通配符
1.1定义
通配符的表示形式是“ ?”,泛型中的通配符会被认为是所有泛型类型包括Object类型的父类。通配符所认定的一个取值应该是大于Object,某结构使用了泛型的通配符之后就不允许向里面添加元素了,除过null。但是可以通过get方法访问所指向的对象,返回值是Object类型。通配符在泛型机制中主要用作集合之间的赋值。

List list4=new ArrayList<>(); list4=list; list4.add(null); /* * 此处可以使用Object接收,但是不能使用Person接收 * 因为Object是所有类型的父类,此处的get是通过通配符访问的, * 因此不知道什么类型。 */ list4.get(0); System.out.println();

1.2 限制性通配符
所谓限制性通配符就是规定了集合中添加元素是在某个区间之内,有两种方式:List:称为上限,表示集合中的元素必须小于等于A的类型;List称为下限,表示集合中的元素的类型大于等于A的类型,为了适应多态的特点,添加元素的类型必须符合多态的特点,不能向有上限的集合中添加元素,因为不知道具体的类型是什么。可以向有下限的集合中添加元素,但是添加的添加的元素应该比下限所表示的类小。
//范围为(-无穷,Person),取值范围无法界定 List list=null; //左闭右开,添加的时候比Person小 List list1=null; List list2=new ArrayList(); list2.add(new Person()); List list3=new ArrayList(); List list4=new ArrayList(); ////有上限 ////list=lit2; //list=list3; //list=list4; ////有下限 //list1=list2; //list1=list3; // list1=list4; //添加元素 /* * 此处出现错误的主要原因,list集合是有上限的因此不能确定 * 比上更小的类。 */ //list.add(new Person()); boolean b= list1.add(new Student()); //获取数据 Person p=list.get(0); //获取数据 Object o=list1.get(0); }

    推荐阅读