通配符类型
为什么引入通配符类型,严格的泛型系统使用起来不太方便。(尤其是方法参数校验上)
例如:我编写一个打印Pair<Employee>的函数,是无法传递Pair<Manager>的,因为两者没有任何关系
但是引入通配符类型以后,Pair<S> 和 Pair<T> 就有关系了
例如:
Pair<? extends Employee> 是 Pair<Employee> 和 Pair<Manager>的父类
Pair<? extends Manager> 是 Pair<Manager> 的父类
Pair<? extends Employee> 是 Pair<? extends Manager> 的父类
Pair<? super Employee> 是 Pair<Employee> 和 Pair<Object> 的父类;
Pair<? super Manager> 是 Pair<Employee> 和 Pair<Manager> 和 Pair<Object> 的父类;
Pair<? super Manager> 是 Pair<? super Employee> 的父类
而无限定类型通配符。Pair<?>更感觉有点扯淡。
Pair 是 Pair<?> 的父类,Pair<?> 是其他 【子类限定】【父类限定】的父类
子类通配符 允许读取一个泛型对象,并赋值给该限定类型
即修改器方法不允许调用,访问器方法可以访问,并赋值给父类类型
超类通配符 允许进行写入,但是只能传递该限定类型及其子类!(子类这个有点变态),也可以读取,但是只能返回Object
即修改器可以调用,但是只能传递(限定类型及其子类),访问器方法可以访问,只能返回Object
无限定通配符 不允许写入,读取也只能返回Object
即修改器不可以调用,访问器方法可以访问,只能返回Object
菜鸡一枚,重新学习JAVA,不对之处请指正。