Java -- > 泛型深入
感受泛型的优点:
- 1、 红色框内的就是泛型,说的直白一点,上边的泛型就是集合的数据类型,它可以约束集合,因为Java作为一种强类型的语言,它希望在对数据操作之前就知道改数据属于何种类型,便于后续对这些数据的操作。比如,我们平时很少会去使用所有数据类型的父类:Object去定义一个变量或者集合,而是去使用具体的数据类型如int、Integer,double、Double等等~~~
- 2、我们可以看到,如果不使用泛型,集合内可以添加任意类型的元素,如果我们后续遍历这个集合的话,或者对着个集合进行其他强制类型转换等其他操作的话,我们无法确定用何种数据类型进行强制类型转换。
- 模拟ArrayList集合自定义一个集合MyArrayLIst集合,完成添加和删除功能的泛型设计即可。
- 泛型方法:例 --> 模拟实现Arrays.toString()方法,实现传入任意类型的数组都能打印数组的内容:
示例运行结果:
- 泛型接口导学:教务系统,提供一个接口可约束一定要完成数据的增删改查操作:
学生类:
老师类:
这样,通过实现类约束具体类型数据的操作
- 泛型通配符:案例导学-->开发一个极品飞车的游戏,所有的汽车都能一起参与比赛
对此,或许我们的第一反应是将泛型类型改为Car类型:
但是你会发现,Car类型的集合会导致任意类型Car子类类型的所有车型都无法进入比赛,理论上来说不应这样,因为我们知道:父类里边定义的是所有子类共有的特征,那为什么还有导致这样的现象呢?这里值得一提的一点是:虽然BWM和BENZ都继承了Car,但是ArrayList<BWM>和ArrayList<BENZ>与ArrayList<Car>是没有关系的,说的直白一点:类是类,集合是集合,类有继承关系但集合没有。
解决方法:通配符-->
所谓通配符:就是在使用集合的时候可以代表一切数据类型。
可是,这也会带来问题:由于?表示可以代表一切数据类型,那么集合中就可以添加任意类型的数据,这会使得集合内部的数据类型过于杂乱,比如:我们可以在定义一个Cat类,则创建的Cat类对象也可以进入这个集合中去:
这不乱套了?解决方法:使用上下限,此处用的上限:? extends Car:?必须是Car或者其子类;下限表示:? super Car:必须是Car或者其父类 (实际开发中泛型下限使用较少):
这样,通过使用 通配符+泛型上限 ,使得泛型作为方法的参数类型即增加了灵活性又不失约束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~