• 泛型的通配符和上下限


    需求: 开发一个极品飞车的游戏,所有的汽车都能一起参与比赛。

    注意:

      虽然BMW和BENZ都继承了Car

      但是ArrayList<BMW>和ArrayLIst<BENZ>与ArrayList<Car>没有关系的!泛型没有继承关系!

      通配符:?

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

          E,T,K,V是在定义泛型的时候使用代表一切类型。

     泛型的上下限:

        ? extends Car : 那么?必须是Car或者其子类。(泛型的上限)

        ? super Car: 那么?必须是Car或者其父类。(泛型的下限。不是很常见)

       代码:

      

    package com.ithei.泛型的通配符;
    
    /**
     * @program: javaDemo01->Test
     * @description: 泛型的通配符
     * @author: 安生
     * @create: 2021-01-25 14:48
     **/
    
    import java.util.ArrayList;
    
    /**
      需求:  开发一个极品飞车的游戏,所有的汽车都能一起参与比赛。
    
     */
    public class Test {
    
        public static void main(String[] args) {
            ArrayList<BENZ> benzs = new ArrayList<>();
            benzs.add(new BENZ());
            benzs.add(new BENZ());
            run(benzs);
    
            ArrayList<BMW> bmws = new ArrayList<>();
            bmws.add(new BMW());
            bmws.add(new BMW());
            run(bmws);
    
            ArrayList<Dog> dogs = new ArrayList<>();
            dogs.add(new Dog());
            dogs.add(new Dog());
            //run(dogs);// 例如 这里如果不约束 就会出现狗与车一起参加赛车比赛的情况 不够严谨
        }
    
        //定义一个方法 让多辆车可以一起进入赛道!
        //这里在使用的时候 就用? 泛型的通配符  这样解决了出入问题  但是能出入还不够 还要约束一下
        //否则这里就有可能出现不严谨的情况
        //所以这里添加了泛型通配符的上限
        public static void run(ArrayList<? extends Car> cars){
    
        }
    }
    //首先定义一个汽车类
    class Car{
    
    }
    //定义宝马
    class BENZ extends Car{
    
    }
    //定义奔驰
    class BMW extends Car{
    
    }
    //定义狗
    class Dog{
    
    }
  • 相关阅读:
    vbox安装增强功能,实现宿主机文件夹共享并浏览器访问
    linux镜像下载
    linux命令之sed
    关于MySQL数据库的备份方案
    linux防火墙使用以及配置
    Jenkins安装部署(二)
    Jenkins安装部署(一)
    Centos7在虚拟机中扩展磁盘空间
    CentOS 7系统根目录分区扩容
    Linux下的SVN服务器搭建
  • 原文地址:https://www.cnblogs.com/bichen-01/p/14325302.html
Copyright © 2020-2023  润新知