Originariamente inviato da panoss
Ciao a tutti! Sono uno studente universitario e ho qualche problema con l'uso dell'interfaccia Comparable durante l'ordinamento di oggetti senza usare classi esterne alla java.lang
codice:
private int find(Object key)
{
for(int i=0; i<size; i++)
{
if (((Comparable)v[i].getKey()).equals(key)) return i;
}
return -1;
}
perchè è necessaria la forzatura usando (Comparable)? Nello specifico sia v[i].getkey() e key sono Object quindi non si tratta di un cast giusto?
Grazie in anticipo!
quando hai di questi dubbi analizza piano piano la funzione che esegui:
tu fai questo controllo qui
codice:
((Comparable)v[i].getKey()).equals(key)
dal quale ho eliminato già una parentesi.
Poi prendi un oggetto (su cui chiami equals) e l'oggetto è questo qui
codice:
((Comparable)v[i].getKey())
anche qui inizia ad isolarlo,
vi[i] da qui prendi l'oggetto key, dici al runtime di considerarlo un oggetto di tipo Comparable e a questo punto ci chiami sopra equals. Key (che passi come parametro nell'equals, ha le stesse caratteristiche dell'oggetto in questione.
Quella notazione è del tutto equivalente a
codice:
{
for(int i=0; i<size; i++)
{
Object temp = v[i].getKey();
Comparable comp = (Comparable) temp;
if (comp.equals(key)) return i;
}
return -1;
}
In realtà il cast lo fai, ma come ti dice LeleFt perdi il vantaggio del Comparable proprio perché alla fine non usi compareTo.