2009-08-06 1 views

ответ

4

Это означает, что класс обязуется реагировать на методы, определенные «interface» Comparable.

Преимущество, которое у вас есть с этим (и любым другим объявлением «реализует»), что вы можете «abstract» указать тип объекта и код на интерфейс.

Рассмотрим этого

class A implements Comparable { 
    .... 
} 

class B implements Comparable { 
    .... 
} 


class C implements Comparable { 
    .... 
} 

Вы тогда можете кодировать то, что можно использовать Comparable вместо конкретного типа:

public void doSomethingWith(Comparable c) { 

     c.compareTo(other); // something else... 

} 

и вызывает это нравится:

doSomethingWith(new A()); 

    doSomethingWith(new B()); 

    doSomethingWith(new C()); 

Потому что вы дон 't действительно заботятся о том, какой тип класса, вам просто нужно, чтобы он реализовал интерфейс.

Это (программа для интерфейса, а не реализация) является одним из самых мощных методов в мире программирования OO, потому что он продвигает low-coupling.

1

Это означает, что класс - это тот, который может управляться функциями, которые ожидают, что их аргументы будут объектами, которые можно сравнить с другими объектами того же типа (такими как заданная функция сортировки для списков).

Реализация интерфейса Comparable означает, что класс поддерживает определенные функции, которые требуется интерфейсу (в частности, метод compareTo()), что операции сортировки (или другие), выполняемые в классе, будут использоваться для выполнения их работы без необходимости ухода о остальной части класса.

Для получения более подробной информации: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html

0

Это означает, что объекты этого класса могут быть упорядочены в коллекции, потому что они могут быть сопоставлены друг с другом. Другой вариант - реализовать Компаратор, который является классом, ответственным за сортировку других классов. Comparable ставит логику сортировки непосредственно в класс для сортировки; Компаратор ставит логику сортировки в другом классе.

1

Это означает, что класс А можно отсортировать с помощью сопоставимого метода CompareTo:

A a1 = new A(1); 
A a2 = new A(3); 

// -1, 0, or 1 depending on whether a2 is less than, equal to, or greater than a1 
int order = a1.compareTo(a2); 

Сопоставимые использует естественный порядок для вашего класса.

Еще один способ уйти с Java 5 - Comparator. Вы можете передать этот объект вокруг и иметь несколько способов сравнения и сортировки целевого класса. Например, иногда вам может понадобиться сортировать класс имени по имени, а иногда и по имени. Сопоставимый только дает вам один способ сделать это, но вы можете иметь несколько экземпляров Comparator.

1

Реализация сравнимый интерфейс означает, что А может быть по сравнению с другими экземплярами А.

Многие операции в Java, которые включают сортировки используют методы, определенные в сопоставимом интерфейсе, чтобы определить, если экземпляры А больше, то меньше или равный другим экземплярам.

Используя эти методы, вы можете использовать множество удобных функций, таких как сортировка java, использование экземпляров A как ключей для двоичных деревьев и многое другое.

1

В дополнение к тому, что все остальные сказали, реализуя интерфейс (или расширяя класс), вы получаете принудительное выполнение компилятором контракта супертипа. В случае «Comparable» это означает, что вы получаете ошибку компилятора, если не реализуете метод int compareTo (A anA) в классе реализации. Добавление аннотации «@Override» к методу реализации обеспечивает еще большую безопасность во время компиляции; если вам не удалось реализовать метод с правильной подписью, компилятор скажет вам. Ошибки времени компиляции намного проще и дешевле, чем ошибки времени выполнения. Кроме того, реализация интерфейса позволяет рассматривать любой экземпляр класса реализации как тип интерфейса для методов (и конструкторов), которые принимают тип интерфейса в качестве аргумента или общего параметра. Например, метод «java.util.Collections.max (Collection coll)» принимает коллекцию, базовый тип которой должен расширять «Comparable».
http://download.oracle.com/javase/7/docs/api/java/util/Collections.html#max(java.util.Collection)

Смежные вопросы