我们在学习Java的过程中,接触了各自各样的方法函数,这些方法函数的调用能够实现不同的功能。同样的,泛型作为Java的一个特性,Java中也是有着泛型方法的。
这里大家需要明确一点的是,泛型方法并不一定依赖其外部的类或者接口,它可以独立存在,也可以依赖外围类存在。例如:
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
ArrayList 的这个 get 方法就是一个泛型方法,它依赖外围 ArrayList 声明的 E 这个泛型类型,也就是它没有自己声明一个泛型类型而用的外围类的。
当然,另一种方式就是自己申明一个泛型类型并使用:
public class Caculate {
public <T> T add(T num){
return num;
}
}
这是泛型方法的另一种形态,其中 <T> 用于声明一个名称为 T 的泛型类型,第二个 T 是方法的返回值。
所以外部调用该方法都需要指定一个限定类型才能调用,像这样:
Caculate caculate = new Caculate();
caculate.<Integer>add(12);
caculate.<String>add("fadf");
使用泛型的目的就是为了限定类型,本来不使用泛型语法,那么所有的参数都是 Object 类型的,现在泛型允许我们限定具体类型,这一点要明确。
当然,大家可能没怎么见过这样的调用语法,无论是日常写代码,或是看 JDK 源码实现里,基本上都省略了类型限定部分,也就是上述代码等效于:
Caculate caculate = new Caculate();
caculate.add(12);
caculate.add("fadf");
为什么呢?因为编译会推断你的参数类型,所以允许你省略,但前提是你这个方法是有参数的,如果你这个方法的逻辑是不需要传参的,那么你依然需要显式指定限定的具体类型。例如:
public class Caculate {
public <T> T add(){
T num = null;
return num;
}
}
Caculate caculate = new Caculate();
caculate.add();
这样的 add 方法调用,就意味着你没有限定 T 的类型,那么这个 T 实际上就是 Object 类型,并没有被限定。
想了解更多Java泛型的相关知识,可以观看动力节点在线的Java泛型视频教程,获得更优质的学习资源。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54