• 泛型通配符,上下限 ,生活案例介绍


    通配符:?

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

    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. }

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

  • 相关阅读:
    集成学习思想
    HTML - 请你谈一谈img标签图片和background背景图片的区别
    第10章Tcl脚本编程(二)
    出门在外保护好自己
    Vue-2.6Vue异步更新和$nextTick
    使用Java操作Redis
    Chapter0.3:矩阵代数初步
    别走,这里有一份摸鱼小妙招,别人我不告诉他!
    Android---GC回收机制与分代回收策略
    Devchat-AI 编程助手:Devchat-AI 尝鲜测评+场景实践
  • 原文地址:https://blog.csdn.net/m0_64365315/article/details/125613610