J'ai vu tous les deux utilisés. Quand voulez-vous utiliser l'un plutôt que l'autre?
Réponses
Trop de publicités?Le texte ci-dessous provient de la Comparaison vs Comparable
Comparable
Comparable objet est capable de se comparer avec un autre objet. La classe elle-même doit implémente java.lang.Interface Comparable afin d'être en mesure de comparer ses instances.
Comparateur
Un comparateur objet est capable de comparer deux objets différents. La classe n'est pas à comparer son cas, mais certains autres de la classe des instances. Ce comparateur de classe doit implémenter l' java.util.Comparator
interface.
La mise en œuvre de Comparable
veut dire "je peux me comparer avec un autre objet." C'est particulièrement utile quand il y a une seule naturel de comparaison par défaut.
La mise en œuvre de Comparator
veut dire "je peux comparer les deux autres objets." C'est particulièrement utile lorsqu'il y a plusieurs façons de comparaison de deux instances d'un type - par exemple, vous pouvez comparer les personnes selon l'âge, nom, etc.
Comparables permet à une classe d'implémenter son propre comparaison:
- c'est dans la même classe (il est souvent un avantage)
- il peut y avoir un seul de la mise en œuvre (donc vous ne pouvez pas l'utiliser si vous le souhaitez deux cas différents)
Par comparaison, Comparateur est une comparaison externe:
- il est généralement dans une instance unique (que ce soit dans la même classe ou dans un autre lieu)
- vous indiquez le nom de chacun de mise en œuvre de la façon dont vous voulez trier les choses
- vous pouvez fournir des éléments de comparaison pour les classes que vous ne contrôlez pas
- la mise en œuvre est utilisable même si le premier objet est null
Dans les deux implémentations, vous pouvez toujours choisir ce que vous voulez être comparé. Avec les médicaments génériques, vous pouvez le déclarer, et vérifié à la compilation. Ce système améliore la sécurité, mais c'est aussi un défi pour déterminer la valeur appropriée.
A titre indicatif, j'utilise généralement la plupart des élèves de la classe ou de l'interface à laquelle l'objet peut être comparé, dans tous les cas d'utilisation, j'imagine... Pas très précise une définition bien ! :-(
-
Comparable<Object>
vous permet de l'utiliser dans tous les codes au moment de la compilation (ce qui est bon si nécessaire, ou si mauvais pas et que vous perdez l'erreur de compilation) ; votre de la mise en œuvre doit faire face à des objets, et exprimés en tant que de besoin, mais dans un boîtier robuste. -
Comparable<Itself>
est très stricte sur le contraire.
C'est drôle, quand vous sous-classe elle-Même à la sous-classe, sous-classe doit aussi être Comparables et robuste sur lui (ou elle allait se briser Principe de Liskov, et vous donner des erreurs d'exécution).
Comparable
est généralement préférée. Mais parfois, une classe implémente déjà Comparable
, mais que vous souhaitez trier sur une propriété différente. Ensuite, vous êtes obligés d'utiliser un Comparator
.
Certaines classes réellement Comparators
de communes des cas; par exemple, String
s sont, par défaut, la casse lors du tri, mais il y a aussi une statique Comparator
appelés CASE_INSENSITIVE_ORDER
.