java泛型方法中类型变量的限定


有些时候,类或者方法需要对类型变量进行约束,下面举一个简单的例子,这是一个计算数组中的最小元素的代码段:

class ArrayAlg
{
	public static <T> min(T[] a)
	{
		if(a == null || a.length == 0) return null;
		T smallest = a[0];
		for(int i = 1; i < a.length; i++)
		{
			if(smallest.compareTo(a[i]) > 0)	smallset = a[i];
		}
		return smallest;
	}
}

 但是我们从上述代码中会发现一个问题,min方法中的smallset类型为T,那么就意味者smallest可以是任何一个类的对象,那么如果这个类不拥有compareTo方法,这段代码就会出现以下的异常:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
The method compareTo(T) is undefined for the type T

那么应该如何解决这种问题呢?我们可以对类型变量进行限制,将T限定为实现了Comparable接口的类:public static <T extends Comparable> T min(T[] a) ...,修改完代码后,泛型的min方法只能被实现了Comparable接口的类数组调用了。

另外,一个类型变量或通配符可以有多个限定,例如:<T extends Comparable & Serialization>其中限定类型用‘&’进行分割。

java继承中,可以拥有多个接口超类型,但限定中至多有一个类,且必须是限定列表的第一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值