泛型通配符
一、泛型通配符的种类
- 无边际通配符:<?> → 任意类型
- 向下界定通配符:<? extends A类型> → A类型的子类
- 向上界定通配符:<? super A类型> → A类型的父类
二、泛型通配符出现的原因
package com.generic.demo5;
import java.util.ArrayList;
import java.util.List;
public class GenericTest {
public static void main(String[] args) {
Student[] stus = new Student[10];
Person[] pers = stus;
List<Student> list1 = new ArrayList<Student>();
List<Person> list2 = new ArrayList<Person>();
list2 = list1; //报错
//Type mismatch: cannot convert from List<Student> to List<Person>
}
}
class Person {
}
class Student extends Person {
}
- 由上述代码可知,集合的泛型是不支持上转型的多态的
- 类型匹配异常:
- Type mismatch: cannot convert from List<Student> to List<Person>
- 解决方案:将List集合添加任意类型通配符(<?>)即可
// List<Student> list1 = new ArrayList<Student>();
// List<Person> list2 = new ArrayList<Person>();
// list2 = list1;
//Type mismatch: cannot convert from List<Student> to List<Person>
List<Student> list1 = new ArrayList