(java.lang.Comparable)
Метод sort () класса Arrays упорядочивает массив объектов, если они реализуют интерфейс Comparable.
public interface Comparable {
int compareTo (Object other);
} // метод сравнивает текущий объект с other и возвращает
int<0, если текущий меньше,
int =0, если равно,
int>0, если больше.
Например, в классе Employee сравним зарплаты:
public int compareTo (Object otherObject) {
Employee other = (Employee) otherObject;
if (salary < other.salary) return -1;
if (salary > other.salaty) return 1;
return 0;
}
При описании класса теперь указываем - класс реализует интерфейс
class Employee implements Comparable {
private double salary;
…
public int compareTo (…) {}
}
И можем делать следующее:
…
Employee [] staff = new Employee [3];
staff [0] = new Employee (“Harry”, 35000);
staff [1] = new Employee (“Care”, 75000);
staff [2] = new Employee (“Tony”, 38000);
java.util.Arrays.sort (staff); // import java.util.*
А в методе Arrays.sort () написано:
… if (((Comparable) a[i]).compareTo(a[j]) >0) {
//Поменять a[i] и a[j] местами }
То есть сортируются любые Comparable – классы. Используется интерфейс, т.к. классы уже могут наследовать от других классов:
class Employee extends Person implements Comparable, Cloneable
Паттерн, когда часть операций выполняется на уровне базовых абстрактных классов и интерфейсов и используется наследование от них с конкретной реализацией этих абстракций называется паттерн Шаблонный метод (Template Method).
Тема 10
Внутренние классы