Java泛型方法

Java泛型方法


在学习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;
}

如果我们学过泛型类。呢么我们就应该知道 <T> 可以理解成泛型标识的意思。呢么我们抛开泛型标识。 正常来写我们的方法,public static 后面应该写什么。 是不是返回值类型,如果没有返回值类型就写 void。 没错吧。 呢么我们的 字母 T。 就对应了返回值类型。我们前面传入什么数据类型,呢么他就返回什么数据类型。 继续往后走。 param() 是方法名称,对应的参数 是T类型。也就是调用我这个方法的时候,传入什么。我就是什么数据类型。最后返回 t。

图解。

在这里插入图片描述

需要注意的一点是。如果我们的类也是泛型类。呢么他们的泛型标识并不冲突。依然是我们代码直接带入说明。

现在我们需要创建一个泛型类 Param<T> 并且添加一个属性,类型也是T 。写上对应的Getter和Setter方法。写上有参构造。

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;
    }
}

呢么可能就有朋友注意到了,我们方法的泛型标识和类的泛型标识一样, 都是通过<T> 来标识的,在这里我就先告诉大家,这两个完全不冲突。谁的就是谁的。我们做个测试。

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

可以很清楚的看到。类的泛型类型,和方法的泛型类型,完全不相干,即便是他们 泛型标识符相同 <T> 也不影响我们的正常使用。

THE END
分享
二维码
< <上一篇

)">
下一篇>>