通配符的使用
通配符的符号: ?
- 这个符号在数据库中也称之为占位符
通配符其实也就是什么都可以配
为什么要提出通配符?
这里我们通过一个情况来说明:
当我们要在一个类中写一个遍历ArrayList集合的方法时,这个时候由于我们的ArrayList集合在泛型不同时没有继承关系,我们要给每个泛型情况下的ArrayList集合都写一个遍历的方法,这个时候我们就要提供大量的重载方法,这个时候就会很麻烦,极其麻烦,这个时候我们就想,有没有一种方法可以避免这些重载方法 — > 我们之前讲过,我们使用哦多态的方式可以减少重载方法的定义,这个时候我们如果要使用多态,这个时候就要有继承关系,但是这个时候没有继承关系,因为对于同一个类而言如果泛型不同,那么这个时候这些都是并列的,这个时候这些泛型不同的同一个类之间没有继承关系,这个时候我们就提出了通配符 ----- 这个时候我们使用了通配符之后这些类就都是这个泛型为通配符的类的子类,这个时候我们只需要编写一个方法,这个方法的参数为 ArrayList<?> ,这个时候我们的所有的其他泛型的ArrayList对象都可以赋值给这个ArrayList<? >类型的引用
- 也就是我们的泛型类中使用通配符的为泛型的类就相当于泛型部分的Object类型
ArrayList<?> list1 = null;
ArrayList<String> list2 = new ArrayList<>();
ArrayList<Integer> list3 = new ArrayList<>();
/*
这个时候下面这两种情况都是可以编译通过的,因为我们使用了通配符为泛型的泛型类是其他所有的指定泛型类的父类,但是这个时候的前提是泛型不同,但是类类型相同
*/
list1 = list2;
list1 = list3;
- 类A继承与类B,这个时候G< A>和G< B>没有继承关系(是并列关系),这个时候他们两个当1共同父类是G< ?>
- 后续我们还会提到使用通配符之后的数据的读写,和有限制条件的通配符的使用