集合进阶:泛型的通配符使用场景与细节
目录
前言
本文章是基于在学习Java中遇到的知识点做详细的分享,这也是第一次尝试做这个系列的文章,还在学习中,希望可以点赞支持一下,会坚持做下去的。
一.泛型不具备继承性,但是数据具备继承性
在通配符之前,我们应该了解到,为什么会用到通配符,以及是如何产生的。
在使用ArrayList集合时通常会涉及到数据的泛型问题,在这里有几个点
泛型不具备继承性,如果你定义了一个方法,method(Arrlist<父类> list){};
此时去调用这个method();如果参数传入一个子类类型的集合,那就不可以通过,因为传入的是一个带有泛型的list ,泛型不具备继承性,也就是无法识别子类与父类的关系,但是如果在
ArrayList <父类> list = new Arraylist<>;如果在list中加入一个子类的对象则是可以的,形如
List.add(new 子类());
那我们如果在方法中如何加入父类和子类类型的集合呢。
利用泛型的通配符;
二.什么是通配符
泛型的通配符:
用?来表示不确定的类型
如 <? extends 父类>这就是通配符的格式
三.通配符的使用
两种方法
1.method(Arrlist<?extends 父类> list){};表示可以传入父类,和继承了父类的子类集合;
2.method(Arrlist<?Super 子类> list){};表示可以传入子类,和子类的父类集合;
使用。
如果我们在定义类,方法,接口的时候不确定类型,就可以使用 。
如果类型不确定,但是确定只能传递以后某个继承体系中的类型。
关键:可以限定类型;