通配符:?
?可以在“使用泛型”的时候代表一切类型
ETKV是在定义泛型的的时候使用的
案例
举办一个赛车比赛所以的车都可以参加(只是通配符语法介绍)
先定义一个汽车类
- //汽车类
- class Car{
-
- }
定义一个宝马和奔驰类继承汽车类
- //宝马类继承汽车类
- class BMW extends Car{
-
- }
- //奔驰类继承汽车类
- class Benz extends Car{
-
- }
在定义一个狗类,用于测试语法(泛型上限的问题)
- //定义一个狗类
- class Dog{
-
- }
定义一个汽车赛跑的方法
- //汽车比赛
- public static void compet(ArrayList<Benz> cars ){ //这么写奔驰能进来宝马进不来
-
- }
- //汽车比赛
- public static void compet(ArrayList<BMW> cars ){ //这么写宝马能进来,奔驰进不来
-
- }
有的人会说那我直接写car不就都进来了,可以试一下
- //汽车比赛
- public static void compet(ArrayList<Car> cars ){ //这么一写都进不来了
-
- }
这是后就要使用通配符?
- public static void compet(ArrayList<?> cars) {//这么一写都进不来了
-
- }
但是你发现要是没有限制,别说汽车了我狗都可以进来 所以后来又有了上下限问题
- public class Test {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ArrayList<Benz> benzs=new ArrayList();
- benzs.add(new Benz()); //加一辆奔驰车
- ArrayList<BMW> bmws=new ArrayList();
- bmws.add(new BMW());
- compet(benzs);
- compet(bmws);
- ArrayList<Dog> dogs=new ArrayList<>();
- dogs.add(new Dog());
- compet(dogs);
- }
-
- //汽车比赛
- public static void compet(ArrayList<?> cars) {//这么一写不管什么东西都能进来了所以还有优化才有了上下限问题
-
- }
-
- }
- //汽车比赛
- public static void compet(ArrayList<? extends Car> cars) {//这么一写都进不来了
-
- }
这是后只有汽车可以进来狗就进步来了