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