泛型就是指不确定的类型.给大家看一个例子.
上图代码中list1规定了存储的数据必须是String类型,而list2没有规定,所以可以存储任何类型的数据.接下来说一下泛型的意义.
无论是Collection还是Map,只要是集合,如果没有用泛型确定存储数据的类型,那么存储进来的数据就会被默认当做object类,也就是会被强制转成object类,数据出去的时候也是object类,除非自己手动强制转换需要的类,这样一来效率低下,而来如果不手动转换就会导致有一些类特有的方法不能调用,导致程序出错.
1.泛型用在类,类属性,类非静态方法上
从图中可以看到,如果一个类和它的属性使用了泛型,那么可以用到构造方法里面,然后在实例化的时候确定其具体类型.
2.泛型用在静态方法
如果一个静态方法需要用到泛型,那么需要在static后面自定义一个新的泛型.
3.泛型用在接口上
当一个接口使用泛型,另外一个类去实现这个接口时,可以选择在实现的时候确定泛型类型,也可以继续使用泛型,这样就又是一个带有泛型的类.
泛型通配符. 给大家看一个例子.
图中的test1和test2用法,可以遍历集合中的东西,但是由于是泛型,所以具体的类型不确定,我们需要写很多冗余代码,这时可以使用泛型通配符.
泛型通配符就是一个"?",不管泛型传入何种类型的参数,都可以匹配到,这样就减少了代码的冗余.
这里介绍一下泛型的上限和下限. 上限:
相比刚才的泛型通配符,这里有上限,有一个extends关键字,里面传入的泛型必须是E类型及其子类.
下限:
相比刚才的泛型通配符,这里有下限,有一个super关键字,里面传入的泛型必须是E及其父类.