Java基础--泛型
泛型在Java中也是个很重要的知识点,本人主要讲解基础概念,如果有错的地方请大家多多指正谢谢。
首先,什么是泛型:
泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型。(先用类型参数变量,等实际要用的时候,再明确指定该类型是什么)这个我刚开始的时候也不太理解这句话,不了解的先往下看,之后再回头看看这句话。
相关术语:
ArrayList<E>
中的E称为类型参数变量ArrayList<String>
中的String称为实际类型参数整个称为
ArrayList<E>
泛型类型整个
ArrayList<String>
称为参数化的类型ParameterizedType
为什么需要泛型:
1、当没有用泛型时
比如ArrayList集合没有泛型时,然后类型永远是object。然后我们创建ArrayList实例时就可以往集合里增加任何对象,因为object是任何对象的父类,这个语法 没有任何错误,但是当我们从集合里取出对象时,就要强制转换成所对应的对象。
2、用了泛型之后
当ArrayList集合用了泛型之后,我们在创建List实例时,就会明确了该实例用了什么类型,也就不用强制转换。
ArrayList集合用了泛型之后,就可以用增强for循环遍历集合,因为确定了类型。
所以ArrayList集合现在是用泛型的知识,部分源码如下:
类型通配符:?
通配符和泛型差不多。不过通配符有上限和下限。
通配符上限运用:
现在,我想接收一个List集合,它只能操作数字类型的元素【Float、Integer、Double、Byte等数字类型都行】,怎么做???
我们学习了通配符,但是如果直接使用通配符的话,该集合就不是只能操作数字了。因此我们需要用到设定通配符上限
通配符下限:
表示类型参数是String的父类。
通配符和泛型方法:
泛型运用:
当我们写Dao时,一般都会写好多个Dao,一般都是多少个表就会写多小个Dao,而且里面的方法差不多都一样,都是基本的增删改查。但是,我们可不可以写一个抽象类Dao,包含了增删改查等功能,然后其他Dao继承就行,就不需要再写增删改查方法了呢?
抽象Dao:
其他Dao: