一篇文章带你搞定 Java 中的泛型方法

前面的所有泛型操作都是将整个类进行泛型化,但同样也可以在类中定义泛型化的方法。
泛型方法的定义与其所在的类是否是泛型类是没有任何关系的。

一、定义泛型方法

在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型:

[访问权限] <泛型标识> 泛型标识 方法名称([泛型标识 参数名称])
class Demo{
	public <T> T fun(T t){//可以接收任意类型的数据
	return t;
	}
}

public class Test{
    public static void main(String[] args) {
        Demo d = new Demo();
        String str = d.fun("Java");//传递字符串
        int i = d.fun(30);//传递数字,自动装箱
        System.out.println(str);
        System.out.println(i);
    }
}

程序中的 fun() 方法是将接收的参数直接返回,因为在方法接收参数中使用了泛型操作,所以此方法可以接收任意类型的数据,而且此方法的返回值类型将由泛型指定。

二、通过泛型方法返回泛型类实例

如果可以通过泛型方法返回一个泛型类的实例化对象,则必须在方法的返回类型声明处明确地指定泛型标识。

class Info<T extends Number>{//此处指定泛型只能是数字类型
    private T var;//此变量的类型由外部决定
    public T getVar(){//返回值的类型由外部指定
        return var;
    }

    public void setVar(T var) {//设置的类型由外部指定
        this.var = var;
    }
    public String toString(){//覆写 Object 类中的 toString() 方法
        return this.var.toString();
    }
};

public class Test{
    public static void main(String[] args) {
        Info<Integer> i = fun(30);//传递整数到 fun() 方法
        System.out.println(i.getVar());
    }
    public static <T extends Number> Info<T> fun(T param){
        Info<T> temp = new Info<T>();//根据传入的数据类型实例化 Info对象
        temp.setVar(param);//将传递的内容设置到Info类中的var属性之中
        return temp;//返回实例化对象
    }
}

代码中的 fun() 方法在 static 关键字处定义了 <T extends Number> ,表明方法中传入或返回的泛型类型由调用方法时所设置的参数类型决定。

三、使用泛型统一传入的参数类型

如果现在一个方法要求传入的泛型对象的泛型类型一致,也可以通过泛型方法指定

class Info<T>{
    private T var;//此变量的类型由外部决定
    public T getVar(){//返回值的类型由外部指定
        return var;
    }

    public void setVar(T var) {//设置的类型由外部指定
        this.var = var;
    }
    public String toString(){//覆写 Object 类中的 toString() 方法
        return this.var.toString();
    }
};

public class Test{
    public static void main(String[] args) {
        Info<Integer> i1 = new Info<Integer>();//设置 Integer为泛型类型
        Info<Integer> i2 = new Info<Integer>();//设置 Integer为泛型类型
        i1.setVar(3);
        i2.setVar(4);
        add(i1,i2);
    }
    public static <T> void add(Info<T> i1,Info<T> i2){
        System.out.println(i1.getVar() + " -- " + i2.getVar());
    }
}

这里 add 方法中的两个 Info对象的泛型类型必须一致,如果设置不一致,则在编译会出现错误

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值