Faire une classe de comparateur générique
Je suis en train de faire un comparateur qui peut prendre n'importe quel type d'élément de comparaison. Je suis incertain sur la façon de créer la classe. J'ai juste envie de comparer deux éléments de même type (Mais quel que soit le type, le client donne, ex: Integer, String, Double, etc...) afin de voir laquelle est supérieure à l'autre.
public class InsertionComparator implements Comparator<T>
{
/**
* Compares two elements.
*
* @param f1 The first element you want to compare.
* @param f2 The second element you want to compare.
* @return -1,0,1 Whether or not one is greater than, less than,
* or equal to one another.
*/
public int compare(<T> element1,<T> element2)
{
if(element1 < element2)
{
return -1;
}
else
{
if(element1 > element2)
{
return 1;
}
else
{
return 0;
}
}
}
}
S'il vous plaît aider, je vous remercie!
source d'informationauteur DaveMcFave
Vous devez vous connecter pour publier un commentaire.
La chose la plus proche que vous pouvez faire c'est d'avoir un
Comparator
qui peut se comparer tous les objets qui implémentent l'Comparable
interface:C'est vraiment le plus proche que vous pouvez faire: seulement
Comparable
objets "ordre naturel" vous essayez de modèle ici. Mais généralement, une fois que vous avezComparable
objets, vous n'avez pas nécessairement besoin unComparator
: par exemple,Collections.sort
peut prendre soit unList
avec unComparator
ou unList
avecComparable
éléments.Vous ne pouvez pas écrire un seul élément de comparaison pour tout sans certaines hypothèses sur ce que les types de. Que faites-vous avec les classes personnalisées? Comment pouvez-vous déterminer qui est plus grand que l'autre? Pour plus de classes dans la nature, un élément de comparaison n'a aucun sens.
D'autre part, si vous vous limitez à String, Integer, Double, alors qu'ils sont Comparables, et vous pouvez simplement écrire la comparaison avec le compareTo() méthode:
mais ensuite, vous utilisez simplement de l'ordre naturel des éléments, et cela irait à l'encontre du but de l'utilisation d'un comparateur. Vous n'avez généralement pas besoin de l'un de ces cas.
Je ne sais pas si c'est forcément utile, mais il n'est pas impossible à mettre en œuvre un véritable générique comparateur.
Grâce à la réflexion de l'interface, vous pouvez, par exemple, l'ordre des objets par leur nom de classe. Ou peut-être même d'une certaine manière, par leur hiérarchie de classe. Les enfants, lorsque les parents ont, par exemple.
Ou vous pouvez les trier en fonction de ce que leur méthode toString() de produit. Ou hashCode(). Chaque objet dispose d'entre eux, après tout.
Quoi que vous fassiez, n'oubliez pas de considérer que l'un et l'autre élément pourrait être null.
...Je pense que nous avons besoin de savoir ce que vous avez besoin de ce générique comparateur pour.