泛型方法使用

Java中关于泛型方法中类型变量的确定

首先:在我们使用泛型的时候我们要显示的告诉编译器所要使用的具体类型,比如:

//新建了一个Integer类型的ArrayList。并在<>中指明了类型。
ArrayList<Integer> list = new ArrayList<Integer>();
//还可以将代码简化为如下形式:在这个过程中是编译器帮我们完成了自动类型推断。
ArrayList<Integer> list = new ArrayList<>();

所以,有一个问题很困惑我:**我们在调用泛型方法时并没有显示的指明类型变量的具体类型,那方法是怎么拿到我具体类型的呢?**当然你可以直接说是类型推断,对的没错肯定是类型推断,但是有没有什么依据呢?

如下,定义了一个泛型方法:

class ArrayAlg{
//返回数组的中间数
public static <T> T getMiddle(T[] a){
	return a[a.length/2]
}
}
//当调用一个泛型方法时,在方法名前的尖括号中放入具体的类型:
String[] names = {"Jonn", "Q" , "public"};
String middle = ArrayAlg.<String>getMiddle(names);

在这种情况下(实际也是大多数情况)下,方法调用可以省略类型参数。编译器有足够的信息能够能够推断出所调用的方法。它**用names的类型(即String[ ])与泛型类型T[ ]进行匹配并推断出T一定时String。**也就是说,可以调用

String middle = ArrayAlg.getMiddle(names);

这就成了我们平时使用的方式,也就是说我们其实是省略了显示的指明方法的参数类型这步骤,编译器帮我们自动完成。

参考资料:

《Java核心技术》(第八版)

《C++ Primer Plus》(第六版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值