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


    通配符:?

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

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

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

  • 相关阅读:
    性能自动化测试
    10. Tasks and functions(任务和函数)
    python:PyWebIO 模仿 mdict 查英汉词典
    LibTorch中TensorOptions的使用
    metrics.accuracy_score 和metrics.roc_auc_score的计算
    【MySQL】外连接(左外连和右外连)和主键,mysql约束
    Ipad2018可以用电容笔吗?四大款口碑好的电容笔推荐
    线段树——维护序列(两个懒标记的情况)
    LeetCode_单调栈_简单_496.下一个更大元素 I
    Git学习笔记
  • 原文地址:https://blog.csdn.net/m0_64365315/article/details/125613610