Frage

Ich sehe einen solchen Code

class A implements Comparable<A> {


}

Was bedeutet das, was sind die Vor- und Nachteile?

War es hilfreich?

Lösung

Dies bedeutet, dass die Klasse verpflichtet ist, auf die von den definierten Methoden zu reagieren "Schnittstelle" Vergleichbar.

Der Vorteil, den Sie damit haben (und jede andere "implementiert" Erklärung), die Sie können "abstrakt"Der Typ des Objekts und des Codes zur Schnittstelle.

Bedenken Sie

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

Sie können dann etwas codieren, das verwenden kann Vergleichbar anstelle eines bestimmten Typs:

public void doSomethingWith( Comparable c ) {

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

}

Und rufe es an wie:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

Da es Ihnen nicht wirklich wichtig ist, was die Art der Klasse ist, kümmert Sie sich nur darum, dass es die Schnittstelle implementiert.

Dieses (Programm zur Schnittstelle eher zur Implementierung) ist eine der leistungsstärksten Techniken in der OO -Programmierwelt, weil es fördert Niedrige Kopplung.

Andere Tipps

Durch die Implementierung einer vergleichbaren Schnittstelle kann ein Vergleich mit anderen Fällen von A. verglichen werden.

Viele Operationen in Java, bei denen die Sortierung sortiert wird, verwenden die in der vergleichbaren Schnittstelle definierten Methoden, um festzustellen, ob die Instanzen von A größer sind als weniger oder gleich anderen Fällen.

Durch die Implementierung dieser Methoden können Sie viele praktische Funktionen wie Java -Sortierung verwenden, Instanzen von A als Schlüssel für binäre Bäume und vieles mehr verwenden.

Dies bedeutet, dass die Klasse A mit der vergleichbaren Vergleichsmethode sortiert werden kann:

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

Vergleichbar verwendet die natürliche Bestellung für Ihre Klasse.

Ein anderer Weg, seit Java 5 zu gehen ist, ist Vergleicher. Sie können dieses Objekt übergeben und mehr als eine Möglichkeit haben, die Zielklasse zu vergleichen und zu sortieren. Beispielsweise möchten Sie beispielsweise eine Name -Klasse nach Vornamen, manchmal nach Nachnamen, sortieren. Vergleichbar gibt Ihnen nur einen Weg, dies zu tun, aber Sie können mehrere Komparatorinstanzen haben.

Dies bedeutet, dass die Klasse eine ist, die durch Funktionen betrieben werden kann, die erwarten, dass ihre Argumente Objekte sind, die mit anderen Objekten desselben Typs verglichen werden können (z. B. die vordefinierte Sortierfunktion für Listen).

Durch die Implementierung der vergleichbaren Schnittstelle unterstützt die Klasse bestimmte Funktionen, die die Schnittstelle benötigt (insbesondere die, die compareTo() Methode), dass die Sortiervorgänge (oder andere) Operationen, die in der Klasse ausgeführt werden, ihre Arbeit erledigen wird, ohne sich um den Rest der Klasse kümmern zu müssen.

Für mehr Details:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/comparable.html

Zusätzlich zu dem, was alle anderen sagten, erhalten Sie durch die Implementierung einer Schnittstelle (oder einer Klasse) die Compiler -Durchsetzung des Vertrags des Supertyps. Im Fall von "Vergleichbar" bedeutet dies, dass Sie einen Compiler -Fehler erhalten, wenn Sie die Methode "Int Compareto (A ANA)" in der Implementierungsklasse nicht implementieren. Das Hinzufügen der Annotation '@Override' zur Implementierungsmethode bietet noch mehr Sicherheit für Kompilierzeit. Wenn Sie die Methode nicht mit der richtigen Signatur implementieren, wird Ihnen der Compiler Ihnen mitgeteilt. Kompilierungszeitfehler sind viel, viel einfacher und billiger zu beheben als Fehlern für Laufzeit. Darüber hinaus ermöglicht die Implementierung einer Schnittstelle eine Instanz einer implementierenden Klasse als Schnittstellentyp für Methoden (und Konstrukteure), die den Schnittstellentyp als Argument oder generischer Parameter betrachten. Beispielsweise nimmt die Methode 'java.util.collections.max (Collection Coll)' eine Sammlung an, deren Basistyp sich "vergleichbar" erweitern muss.
http://download.oracle.com/javase/7/docs/api/java/util/collections.html#max(java.util.collection)

Dies bedeutet, dass Objekte dieser Klasse leicht in Sammlungen sortiert werden können, da sie miteinander verglichen werden können. Die andere Möglichkeit besteht darin, einen Komparator zu implementieren, der eine Klasse ist, die für die Sortierung anderer Klassen verantwortlich ist. Die vergleichbare Sortierlogik stellt direkt in die zu sortierende Klasse. Der Komparator bringt die Sortierlogik in eine andere Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top