java数据结构_泛型补充
通配符
? 用于在泛型的使用,称为通配符
通配符解决的问题:
如下图的代码:
上面的代码本身没有语法错误,可以正常编译运行,打印出hello world,不过存在一定的局限性,fun()方法的参数类型被明确指定为了Message<String>类型,意味着该方法只能接收Message类中泛型为String类型的对象。
如果后序有Message的其他类型对象,例如Message<Integer>,就需要再编写一个不同的fun方法。例如:
我们需要的解决方案:可以接收所有的泛型类型,但是又不能让用户随意修改。这种情况就需要使用通配符处理:
使用通配符之后,即实现了可以接收任意类型的数据功能,又实现了在方法中无法任意修改。
在"?"的基础上又产生了两个子通配符:
? extends 类:设置通配符的上界
? super类:设置通配符的下界
通配符上届
语法:
<? extends 上界>
<? extends Number> //可以传入的实参类型是Number或者是Number的子类
有如下类:
fun方法如下:
在主函数中,前两个Apple 和 Fruit均不报错,因为是Food的子类,或者是Food的子类的子类,但是在参数为Fork的时候,会报错,就是因为有? extends Food的作用!
通配符的上界,不能进行写入数据,只能进行读取数据。
通配符下界
语法:
<? super 下界>
<? super Integer> //代表 可以传入的实参的类型是Integer或者Integer的父类类型
有如下类:
fun方法:
main方法:
但是注意:在通配符的上界中,是可以进行修改的,这点于 ? extends 不一样!!!
完!!!