有时,类或者方法需要对类型变量加以约束。下面是一个典型的例子。我们要计算数组中的最小元素:

    1. class ArrayAlg
    2. {
    3. public static <T> T min(T[] a) //almost correct
    4. {
    5. if(a == null || a.length == 0) return null;
    6. T smallest = a[0];
    7. for (int i = 1; i < a.length; i++)
    8. if (smallest.compareTo(a[i]) > 0) smallest = a[i];
    9. return smallest;
    10. }
    11. }

    但是,这里有一个问题。请看一下 min 方法的代码内部。变量 smallest 类型为 T ,这意味着它可以是任何一个类的对象。怎么才能确信 T 所属的类有 compareTo 方法呢?
    解决这个问题的方案是将 T 限制为实现了 Comparable 接口(只含一个方法 compareTo 的标准接口)的类。可以通过对类型变量 T 设置限定 (bound)实现这一点:
    public static T min(T[] a) . . .
    实际上 Comparable 接口本身就是一个泛型类型。