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


    通配符:?

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

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

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

  • 相关阅读:
    怎么批量将视频锐化处理并垂直翻转画面?
    Codeforces 167B 状态设置的优化
    Facebook个人主页和公共主页的区别
    深入解析具名导入es6规范中的具名导入是在做解构吗
    JavaWeb之js
    洛谷 P1439 【模板】最长公共子序列 【一题掌握和分清LCS和LIS】
    JAVA 取出Map元素值 的三种方法
    细说MySQL数据类型
    【进程间通信】进程间通信方式汇总
    ChatGLM2-6B_ An Open Bilingual Chat LLM _ 开源双语对话语言模型
  • 原文地址:https://blog.csdn.net/m0_64365315/article/details/125613610