一、泛型的含义
泛型是JDK1.5出现的一种新特性,主要用来解决对象类型不确定的问题。
其中泛型可以用在类、接口、方法中,分别称为泛型类、泛型接口、泛型方法。
1.泛型类(具有一个或者多个泛型变量的类)
2.泛型接口(具有一个或者多个泛型变量的接口)
3.泛型方法(具有一个或者多个泛型变量的方法)
核心目标:解决容器类型在编译时安全检查的问题
比如这个我们规定了要传入String,但是代码中只是传入了int,所以会报错,直接在编译期间报错。
只是在编译期才有作用,运行期就会失去作用,我们将两个不同泛型的同一类进行编译为.class会发现他们里面就不含有泛型的信息了。
二、通配符
2.1 ?通配符
如果说想传入的参数是继承的类,我们可以用?,比如下面:
用上?就可以传入Integer的父类Number了。但是string在编译器也可以传入,运行的时候就会出现无法进行转化类型。
所以为了防止这种太自由放纵,因此来上限界或下限界
2.2上限界 ? extend E
刚才上面string就马上报错了。因为我们这边把上限界 限定到Number.
2.3 下限界 ? super E
Integer是Number的子类,因此Number可以过,但是string就不行。
如果改为Object的话,Number是Object的子类,因此Number也会报错。
四、泛型方法
泛型方法可不受泛型类的约束,可以参入任何参数,但是泛型类的其他方法就不行,必须按照泛型类的进行约束。
从这两个图可以看出,handlSomething是一般方法必须受到String的约束,但是printArray不受到String的约束,可以任意传入类型。
五、常用字符的含义
比较常见的通配符号:T,K,V,?。实际上A~Z都可以,只是大家习惯这样叫。
1.“?”通常代表不确定的JAVA类型
2.“T”表示某个具体的Java类型
3.“K”代表java键值对中的Key
4.“V”代表java键值中的Value
5.“E”代表Element(某个元素)