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
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;
}