Pergunta

Eu vejo código assim

class A implements Comparable<A> {


}

O que isso significa, quais são as vantagens e desvantagens disso?

Foi útil?

Solução

Isso significa que a classe está comprometida em responder aos métodos definidos pelo "interface" Comparável.

A vantagem que você tem com isso (e qualquer outra declaração de "implementos") que você possa "abstrato"O tipo de objeto e código para a interface.

Considere isto

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

Você então pode codificar algo que pode usar Comparável Em vez de um tipo específico:

public void doSomethingWith( Comparable c ) {

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

}

E invocar como:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

Como você realmente não se importa com qual é o tipo de classe, você apenas se importa com ela implementa a interface.

Este (programa para a interface, em vez da implementação) é uma das técnicas mais poderosas no mundo da programação OO, porque promove baixo acoplamento.

Outras dicas

Implementar uma interface comparável significa que A pode ser comparado com outras instâncias de A.

Muitas operações no Java que envolvem classificação usam os métodos definidos na interface comparável para determinar se as instâncias de A são maiores do que menos ou iguais a outras instâncias.

Ao implementar esses métodos, você pode usar muitos recursos úteis, como Java Sort, use instâncias de AS Keys para árvores binárias e muito mais.

Isso significa que a Classe A pode ser classificada usando o método comparável comparado:

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

Comparável usa a ordem natural para sua classe.

Outro caminho a percorrer desde o Java 5 é Comparador. Você pode passar esse objeto e ter mais de uma maneira de comparar e classificar a classe de destino. Por exemplo, às vezes você pode querer classificar uma classe de nome pelo primeiro nome, outras vezes pelo sobrenome. Comparável apenas fornece uma maneira de fazer isso, mas você pode ter várias instâncias de comparador.

Isso significa que a classe é aquela que pode ser operada por funções que esperam que seus argumentos sejam objetos que possam ser comparados com outros objetos do mesmo tipo (como a funcionalidade de classificação predefinida para listas).

Implementar a interface comparável significa que a classe suporta certas funções que a interface exige (especificamente, o compareTo() método), que as operações de classificação (ou outras) realizadas na classe utilizarão para fazer seu trabalho sem precisar se preocupar com o restante da classe.

Para mais detalhes:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/comparable.html

In addition to what everyone else said, by implementing an interface (or extending a class), you get compiler enforcement of the contract of the supertype. In the case of 'Comparable', that means that you get a compiler error if you fail to implement the 'int compareTo(A anA)' method in the implementing class. Adding the annotation '@Override' to the implementing method provides even more compile-time safety; if you fail to implement the method with the right signature the compiler will tell you. Compile-time errors are much, much easier and cheaper to fix than run-time errors. Furthermore, implementing an interface allows any instance of an implementing class to be treated as the interface type for methods (and constructors) that take the interface type as an argument or generic parameter. For example, the 'java.util.Collections.max(Collection coll)' method takes a collection whose base type must extend 'Comparable'.
http://download.oracle.com/javase/7/docs/api/java/util/Collections.html#max(java.util.Collection)

It means that objects of this class can be easily sorted in collections because they can be compared to each other. The other option is to implement a Comparator which is a class responsible for sorting other classes. The Comparable puts the sorting logic directly in the class to be sorted; the Comparator puts the sorting logic in a different class.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top