有些时候,类或者方法需要对类型变量进行约束,下面举一个简单的例子,这是一个计算数组中的最小元素的代码段:
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继承中,可以拥有多个接口超类型,但限定中至多有一个类,且必须是限定列表的第一个。