Sto cercando di fare uno SkipList e ho un metodo che accetta un tipo generico di dati:Generics e compareTo() metodo
public void add(E key, Integer value)
{
Node<E> p;
p = find(key);
}
che porta qui:
public Node<E> find(E key)
{
//Start at head
Node<E> p = head;
while (true)
{
while ((p.getRight().getKey() != Node.posInf) && (p.getRight().getKey().compareTo(key) <= 0))
{
p.setRight(p.getRight());
}
//More stuff down here
}
}
Il problema è sul metodo compareTo()
. Dice che il metodo compareTo()
non è definito per il tipo E
. In Eclipse mi vuole aggiungere due conversioni di tipo simile a questo:
((String) p.getRight().getKey().compareTo((String) key) <= 0)
Perché si vuole String
? Il tipo di dati potrebbe essere qualsiasi cosa. Ho provato a fare typecast di E
, ma Eclipse vuole cambiarlo di nuovo in String
. Qualsiasi aiuto sarebbe apprezzato.
Se il tipo di dati può essere qualsiasi cosa (non hai mostrato la definizione), allora il compilatore non sa se ha o meno un metodo 'compareTo()', perché potrebbe essere un tipo che non averlo. – RealSkeptic
@OlivierPoulin Stavo cercando di modificare [questa implementazione] (http://www.mathcs.emory.edu/~cheung/Courses/323/Syllabus/Map/skip-list-impl.html) di un SkipList per includere i generici . Questo metodo sta solo attraversando l'elenco e cercando un posto appropriato in cui posso aggiungere un nodo. – cress