java泛型通配符如何使用

2025-04-22 06:00:42

1、为了可以更好的演示案例效果,需要创建Person和Student两个类文件,Student继承Person类,并且使用idea开发工具生成对应的get和set以及toString方法

java泛型通配符如何使用
java泛型通配符如何使用

2、Person[] persons = new Person[10]挢旗扦渌;Person[] persons1 = new Student[10];编译通过,说明Student[]可以协变到Person[]List<Person> personList = new ArrayList<Person>();List<Person> personList1 = new ArrayList<Student>();//error第二个编译错误,说明List<Person>和List<Student>是两个不同的类型

java泛型通配符如何使用

3、为了解决这个问题,可以使用?通配符的方式,单独使用是无边界通配符,如图所示,首先传入List<Person>,编译和运行都没有问题

java泛型通配符如何使用
java泛型通配符如何使用

4、在传入List<Student>类型,同样编译和运行都没有问题,说明print(List<?> list)可以传List<Person>和List<Student>两种类型,但print中不能对list进行编辑操作,只能读,尝试使用add方法编译错误

java泛型通配符如何使用
java泛型通配符如何使用

5、固定上边界通配符,<? extends E>,如图所示,List<? extends Person>,只要是Person对象以及子类对象都可以传递进去,print方法内部可以直接作为Person对象类使用,但只能读,不能对list进行add操作

java泛型通配符如何使用

6、运行之后查看打印结果,说明结果和预料的一样

java泛型通配符如何使用

7、固定下边界通配符,<? superE>,如图所示,List<? super Student> list,只要是Student对象以及其父类对象类型的list都可以传递进去,这种方式不同于前面两种,使用下边界通配符可以对list进行add操作了,但不能get出具体的类型,只能是Object类型

java泛型通配符如何使用
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢