В Java что означает расширение от сопоставимого означает - PullRequest
4 голосов
/ 06 августа 2009

Я вижу такой код

class A implements Comparable<A> {


}

Что это значит, каковы его преимущества и недостатки?

Ответы [ 6 ]

4 голосов
/ 06 августа 2009

Это означает, что класс обязуется отвечать на методы, определенные « 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() );

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

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

1 голос
/ 22 августа 2011

В дополнение к тому, что говорили все остальные, реализуя интерфейс (или расширяя класс), вы получаете принудительное исполнение компилятором контракта супертипа. В случае '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)

1 голос
/ 06 августа 2009

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

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

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

1 голос
/ 06 августа 2009

Это означает, что класс A можно отсортировать с помощью метода Comparable 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);

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

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

1 голос
/ 06 августа 2009

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

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

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

0 голосов
/ 06 августа 2009

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

...