Comment comparer deux objets sans connus de leur type réel
-
21-09-2019 - |
Question
Je dois mettre en œuvre une liste chaînée, mais il devrait mettre objet dans la position appropriée. Tout était OK quand je l'utilise en conjonction avec classe spécifique, mais quand j'essayé le rendre universel et l'argument de l'insert de méthode a été objet un problème est apparu. Quand je veux entrée en position droite Objet j'utiliser la méthode CompareTo, mais il n'y a pas la méthode dans la classe d'objets! Le problème est de savoir comment comparer deux éléments d'objet sans connus au sujet de leurs types réels. Peut-être que je devrais utiliser le type de classe générique? Mais qu'en est-CompareTo? Ou peut-être combiner avec classe Element et lieu CompareTo il? Je suppose qu'il est possible. :)
public void insert(Object o)
{
Element el = new Element(o);
// initializing and setting iterators
while(!it.isDone() && ((it.current().getValue())).CompareTo(o)<0)
// it.current() returns Element of List
{
//move interators
}
//...
}
La solution
Vous avez deux options:
- faire la classe de chaque objet et mettre en œuvre
java.lang.Comparable
écrire la logique de comparaison pour chaque classe là-bas, puis juste accepterComparable
au lieu deObject
et appelercompareTo()
- créer une propriété
comparator
de votre liste et le mettre sur la construction. Le comparateur béton (mise en œuvre dejava.util.Comparator
) devrait savoir comment comparer les objets qui sont mis dans ce cas particulier de votre liste.