泛型的通配符和上下限
需求: 开发一个极品飞车的游戏,所有的汽车都能一起参与比赛。
注意:
虽然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{ }