На Java что происходит от сопоставимого среднего

StackOverflow https://stackoverflow.com/questions/1236544

  •  11-09-2019
  •  | 
  •  

Вопрос

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

class A implements Comparable<A> {


}

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

Это было полезно?

Решение

Это означает, что класс стремится реагировать на методы, определенные «интерфейс" Сопоставимо.

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

Учти это

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

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

public void doSomethingWith( Comparable c ) {

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

}

И вызвать это как:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

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

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

Другие советы

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

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

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

Это означает, что класс А может быть отсортирован с использованием сравнимого метода сравнения:

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 Компаратор. Анкет Вы можете передать этот объект и иметь более одного способа сравнения и сортировки целевого класса. Например, иногда вы можете захотеть сортировать класс имен по имени, в других случаях по фамилии. Сопоставимо только один способ сделать это, но у вас может быть несколько экземпляров компаратора.

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

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

Больше подробностей:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/comparable.html

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top