Question

Je vois du code comme celui-ci

class A implements Comparable<A> {


}

Qu'est-ce que cela signifie, quels sont les avantages et les inconvénients?

Était-ce utile?

La solution

Cela signifie que la classe s'est engagée à répondre aux méthodes définies par le "interface" Comparable.

L'avantage que vous avez avec cela (et toute autre déclaration "implémente") que vous pouvez "abstrait"Le type de l'objet et du code à l'interface à la place.

Considère ceci

class A implements Comparable {
    .... 
}

class B implements Comparable {
    .... 
}


class C implements Comparable {
    .... 
}

Vous pouvez alors coder quelque chose qui peut utiliser Comparable Au lieu d'un type spécifique:

public void doSomethingWith( Comparable c ) {

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

}

Et invoque-le comme:

  doSomethingWith( new A() );

  doSomethingWith( new B() );

  doSomethingWith( new C() );

Parce que vous ne vous souciez pas vraiment du type de classe, vous vous souciez simplement de mettre en œuvre l'interface.

Ce (programme à l'interface plutôt à l'implémentation) est l'une des techniques les plus puissantes dans le monde de la programmation OO, car il favorise couplage bas.

Autres conseils

La mise en œuvre d'une interface comparable signifie que A peut être comparé à d'autres instances de A.

De nombreuses opérations en Java qui impliquent le tri utilisent les méthodes définies dans l'interface comparable pour déterminer si les instances de A sont plus ou moins ou égaux à d'autres instances.

En mettant en œuvre ces méthodes, vous pouvez utiliser beaucoup de fonctionnalités pratiques telles que le tri Java, utiliser les instances de A AS de clés pour les arbres binaires, etc.

Cela signifie que la classe A peut être triée en utilisant la méthode comparable de comparaison:

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 utilise la commande naturelle de votre classe.

Une autre façon de procéder depuis Java 5 est Comparateur. Vous pouvez passer cet objet et avoir plus d'une façon de comparer et de trier la classe cible. Par exemple, vous pouvez parfois trier une classe de nom par prénom, d'autres fois par nom de famille. Comparable ne vous donne qu'une façon de le faire, mais vous pouvez avoir plusieurs instances de comparaison.

Cela signifie que la classe est une fonction qui peut être exploitée par des fonctions qui s'attendent à ce que leurs arguments soient des objets qui peuvent être comparés à d'autres objets du même type (comme la fonctionnalité de tri prédéfinie pour les listes).

L'implémentation de l'interface comparable signifie que la classe prend en charge certaines fonctions dont l'interface nécessite (en particulier, la compareTo() Méthode), que les opérations de tri (ou d'autres) effectuées sur la classe utiliseront pour faire leur travail sans avoir à se soucier du reste de la classe.

Pour plus de détails:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/comparable.html

En plus de ce que tout le monde a dit, en mettant en œuvre une interface (ou en prolongeant une classe), vous obtenez l'application du compilateur du contrat du supertype. Dans le cas de «comparable», cela signifie que vous obtenez une erreur de compilateur si vous ne parvenez pas à implémenter la méthode «int compareto (a ana)» dans la classe d'implémentation. L'ajout de l'annotation «@Override» à la méthode d'implémentation offre encore plus de sécurité à temps de compilation; Si vous ne parvenez pas à implémenter la méthode avec la bonne signature, le compilateur vous dira. Les erreurs de temps de compilation sont beaucoup, beaucoup plus faciles et moins chères à corriger que les erreurs d'exécution. De plus, l'implémentation d'une interface permet à toute instance d'une classe d'implémentation d'être traitée comme le type d'interface pour les méthodes (et les constructeurs) qui prennent le type d'interface comme un argument ou un paramètre générique. Par exemple, la méthode 'java.util.collections.max (collection coll)' prend une collection dont le type de base doit étendre «comparable».
http://download.oracle.com/javase/7/docs/api/java/util/collections.html#max(java.util.collection)

Cela signifie que les objets de cette classe peuvent être facilement triés dans les collections car ils peuvent être comparés les uns aux autres. L'autre option consiste à implémenter un comparateur qui est une classe responsable du tri d'autres classes. Le comparable place la logique de tri directement dans la classe à tri; Le comparateur met la logique de tri dans une classe différente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top