Generic 메서드와 제한된 타입 매개변수 Generic Methods and Bounded Type Parameters

제한된 타입 매개변수는 generic 알고리즘들을 구현할때 핵심이된다. 아래의 예는 두번째 인자보다 큰 값이 첫번째 인자인 배열에 몇개가 있는지 세는 메서드이다.
Bounded type parameters are key to the implementation of generic algorithms. Consider the following method that counts the number of elements in an array T[] that are greater than a specified element elem.

public static <T> int countGreaterThan(T[] anArray, T elem) {
    int count = 0;
    for (T e : anArray)
        if (e > elem)  // compiler error
            ++count;
    return count;
}

메서드 구현은 간단하지만, ‘>’ 연산자가 기본형(short, int, double, long, float, byte, char)에만 동작이 허용되기 때문이다. ‘>’ 연산자는 객체간 비교에는 사용할 수 없습니다. 비교연산자 대신 Comparable 인터페이스를 사용해서 문제를 해결할 수 있습니다.
The implementation of the method is straightforward, but it does not compile because the greater than operator (>) applies only to primitive types such as short, int, double, long, float, byte, and char. You cannot use the > operator to compare objects. To fix the problem, use a type parameter bounded by the Comparable interface:

public interface Comparable<T> {
    public int compareTo(T o);
}

Comparable 인터페이스가 적용된 결과 코드는 아래의 코드처럼 될 것입니다.
The resulting code will be:

public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
    int count = 0;
    for (T e : anArray)
        if (e.compareTo(elem) > 0)
            ++count;
    return count;
}