泛型的通配符和上下限
需求: 开发一个极品飞车的游戏,所有的汽车都能一起参与比赛。
注意:
虽然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{ }
本文作者:AxeBurner
本文链接:https://www.cnblogs.com/bichen-01/p/14325302.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步