一、通配符概念
其实.上很多技术点都是为了解决某一问题而出现的,那么我们在学习的过程中可以先提出问题,然后在使用我们的技术去解决。
DEMO:观察问题
以上代码可以正常执行,但是如果泛型类中的类型改变之后发现了方法中的参数的泛型也需要改变,这就说明了fun方法依赖Person的泛型,这也是耦合度较高的一种体现,此时我们可以在方法的参数中使用通配符代替具体的泛型。通配符使用“?”即可。
DEMO:通配符解决问题
此时使用了“?”在方法中替代具体的泛型类型,之后不管Person中的泛型如何改变,fun 方法都不需要改动,其实通配符还有两个子通配符。一个是通配符上限,一个是通配符下限。
二、通配符的上限
1、通配符上限: ? extends. 上限 类型。
DEMO:在方法中指定通配符的上限
方法方法定义了上限之后:方法只能接受上限类型以及.上限类型的子类类型。除了方法的通配符可以定义上限之外类的泛型也可以定义上限。
DEMO:类的泛型上限
类使用了泛型.上限之后实例化子类的时候指定的泛型的具体类型只能是泛型上限本类类型以及泛型上限类型的子类类型。
三、方法通配符的下限
定义方式: ? super‘ 下 限类型
DEMO:通配符下限类型
使用了通配符下限之后:方法只能接受下限类型以及下限类型的父类类型作为泛型具体类型。类泛型有下限吗?类的泛型是没有下限的。
总结:
1、使用通配符“?”解决了方法对泛型类的依赖
2、通配符的.上限“? extends.上限类型”, 方法只能接受上限类型以及上限类型的子类类型,泛型类也可以设置上限。
3、通配符下限“?super 下限类型”,方法只能接受下限本类类型以及下限的父类类型,泛型类不可以设置下限。