2010-03-21 3 views
0

Je dois implémenter une liste un liée mais il devrait mettre l'objet dans la position appropriée. Tout était OK quand je l'ai utilisé en conjonction avec une classe spécifique, mais quand j'ai essayé de le rendre universel et l'argument de la méthode insert était Object un problème est apparu. Lorsque je veux entrer Object dans la bonne position, je devrais utiliser la méthode CompareTo, mais il n'y a pas de méthode dans la classe Object! Le problème est comment comparer deux éléments d'objet sans connaître leurs types réels. Peut-être que je devrais utiliser le type de classe générique? Mais qu'en est-il de CompareTo? Ou peut-être combiner avec la classe Element et l'endroit CompareTo là? Je suppose que c'est faisable. :)Comment comparer à deux objet sans connaître leur type réel

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 
    } 
//... 
} 

Répondre

5

Vous avez deux options:

  • font chaque classe de l'objet de mettre en œuvre java.lang.Comparable et écrire la logique de comparaison pour chaque classe là-bas, puis juste accepter Comparable au lieu de Object et d'appel compareTo()
  • créer une propriété comparator de votre liste et le mettre en construction. Le comparateur concret (implémentation de java.util.Comparator) doit savoir comment comparer les objets qui sont mis dans cette instance particulière de votre liste.
+2

Bonne réponse. Je recommanderais de le rendre générique par classe LinkedList > {public void insert (T t) {...} public T get (...) {...}. – ponzao

Questions connexes