码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 泛型通配符,上下限 ,生活案例介绍


    通配符:?

    ?可以在“使用泛型”的时候代表一切类型

    ETKV是在定义泛型的的时候使用的

    案例

    举办一个赛车比赛所以的车都可以参加(只是通配符语法介绍)

    先定义一个汽车类

    1. //汽车类
    2. class Car{
    3. }

    定义一个宝马和奔驰类继承汽车类

    1. //宝马类继承汽车类
    2. class BMW extends Car{
    3. }
    4. //奔驰类继承汽车类
    5. class Benz extends Car{
    6. }

    在定义一个狗类,用于测试语法(泛型上限的问题)

    1. //定义一个狗类
    2. class Dog{
    3. }

    定义一个汽车赛跑的方法

    1. //汽车比赛
    2. public static void compet(ArrayList<Benz> cars ){ //这么写奔驰能进来宝马进不来
    3. }
    1. //汽车比赛
    2. public static void compet(ArrayList<BMW> cars ){ //这么写宝马能进来,奔驰进不来
    3. }

    有的人会说那我直接写car不就都进来了,可以试一下

    1. //汽车比赛
    2. public static void compet(ArrayList<Car> cars ){ //这么一写都进不来了
    3. }

    所以虽然BMW和BENZ都继承了Car但是ArrayList<BMW>和ArrayList<Car>没有关系的

    这是后就要使用通配符?

    1. public static void compet(ArrayList<?> cars) {//这么一写都进不来了
    2. }

    但是你发现要是没有限制,别说汽车了我狗都可以进来 所以后来又有了上下限问题

    1. public class Test {
    2. public static void main(String[] args) {
    3. // TODO Auto-generated method stub
    4. ArrayList<Benz> benzs=new ArrayList();
    5. benzs.add(new Benz()); //加一辆奔驰车
    6. ArrayList<BMW> bmws=new ArrayList();
    7. bmws.add(new BMW());
    8. compet(benzs);
    9. compet(bmws);
    10. ArrayList<Dog> dogs=new ArrayList<>();
    11. dogs.add(new Dog());
    12. compet(dogs);
    13. }
    14. //汽车比赛
    15. public static void compet(ArrayList<?> cars) {//这么一写不管什么东西都能进来了所以还有优化才有了上下限问题
    16. }
    17. }

    这时候就要使用上下限

    ?extends Car:必须是Car或其子类  泛型上限 (用的多)

    ?super Car: 必须是Car或其父类  泛型下限

    1. //汽车比赛
    2. public static void compet(ArrayList<? extends Car> cars) {//这么一写都进不来了
    3. }

    这是后只有汽车可以进来狗就进步来了

  • 相关阅读:
    【Java集合类面试六】、 HashMap有什么特点?
    SPA项目开发关于动态树+数据表格+分页
    成长的旅途,未知的邂逅
    【数据结构初阶】二叉树——堆的应用(堆排序 + TOP-K问题)
    Probability Calibration概率校准大比拼:性能、应用场景和可视化对比总结
    <四>理解空间配置器allocator, 优化STL 中的Vector
    OpenResty无损升级内嵌nginx版本0DAY漏洞
    手写JS的new操作符的功能、手写实现JS中Object类的call函数、apply函数的功能
    ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
    详解 Optional 的使用,优雅的解决空指针异常
  • 原文地址:https://blog.csdn.net/m0_64365315/article/details/125613610
  • 最新文章
  • 大数据没那么远:把散乱数据理顺,让业务敢用
    高性能百度OCR ONNX Runtime C#实现
    C#/.NET/.NET Core技术前沿周刊 | 第 70 期(2026年5.01-5.10)
    Triton学习 · Part 1 · Hello, world!
    manyspeech-cli 本地命令行语音识别工具
    PortSwigger SQL注入LAB5 & LAB6
    Go-Spring 项目概览
    "HyFormer: Revisiting the Roles of Sequence Modeling and Feature Interaction in CTR Prediction" 论文笔记
    WIZnet-EVB-Pico2开始,用MicroPython玩转以太网开发
    AI 战略下架构演进:小米基于 JuiceFS 的统一存储实践
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号