|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Ограниченные параметры типа являются ключевыми к реализации универсальных алгоритмов. Рассмотрите следующий метод, который считает число элементов в массиве T[], которые больше чем указанный элемент 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<T>:
public interface Comparable<T> {
public int compareTo(T o);
}
Получающийся код будет:
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;
}