在学习Java泛型方法之前,我希望你们针对于Java泛型类有一定的了解并且可以熟练的使用。若了解并不是很详细。可以观看我写的另一篇文章 (也是我写的) Java泛型类 来了解一下。
呢么我们速度过一下泛型方法。其实泛型方法并不难理解。 我们直接上代码来演示一下。
首先我们有两个Java类,一个是存在泛型方法的类,一个是Test测试类。名称随便给都可以。
public class Param {
public static <T> T param(T t) {
return t;
}
}
public class Test {
public static void main(String[] args) {
String aaa = Param.param("aaa");
Integer param = Param.param(1);
Boolean param1 = Param.param(true);
}
我们观看以上代码,不难发现。我们并没有对Param类里的param方法进行重载写法。但是他却可以传进去不同的类类型(数据类型)。就是因为我们使用了泛型方法的原因。
现在我们来拆分掉这个方法,逐步的解释一下它的结构体。
public static <T> T param(T t) {
return t;
}
public 并不用过多解释,static,静态方法,为了可以通过类名称直接访问方法。重点是这几行代码
<T> T param(T t) {
return t;
}
如果我们学过泛型类。呢么我们就应该知道
图解。
需要注意的一点是。如果我们的类也是泛型类。呢么他们的泛型标识并不冲突。依然是我们代码直接带入说明。
现在我们需要创建一个泛型类 Param
public class Param<T> {
private T param;
public Param(T param) {
this.param = param;
}
public <T> T param(T t) {
return t;
}
public T getParam() {
return param;
}
public void setParam(T param) {
this.param = param;
}
}
呢么可能就有朋友注意到了,我们方法的泛型标识和类的泛型标识一样, 都是通过
public class Test {
public static void main(String[] args) {
Param<String > param = new Param<>("我是一个String类型的字符串");
System.out.println("type: " + param.getParam().getClass().getSimpleName() + " value:" + param.getParam());
System.out.println("---------------------------------------");
Integer param1 = param.param(1123);
System.out.println(param1.getClass().getSimpleName());
}
}
我们在测试类创建了一个Param对象并且进行了实例化。可以很清楚的看到,我们类的泛型传递的是一个String的类类型。然后我们并没有新建对象,而是继续用实例化出来的对象,调用了我们的param方法。传递进去一个Integer类型。发现并没有报错。我们通过 getClass().getSimpleName() 来获取一下他们的数据类型。得到以下结果。
type: String value:我是一个String类型的字符串
---------------------------------------
Integer
Process finished with exit code 0
可以很清楚的看到。类的泛型类型,和方法的泛型类型,完全不相干,即便是他们 泛型标识符相同