
Originariamente inviata da
andbin
Più che "senza senso" sarebbe meglio dire "contorto" (e anche inutile). Cose del genere generalmente
non si fanno.
Tra l'altro guardando il Comparatore c'è una cosa che risulta molto evidente: non fai nulla di specifico con gli oggetti ProdottoScontato. Le due variabili prod1 e prod2 sono di tipo Prodotto (la classe base) che ha il getPrezzo() e solo su questo (che esiste anche in ProdottoScontato) basi la comparazione.
Quindi: perché tutto questo contorcimento solo per comparare sul prezzo, che esiste sia per Prodotto che ProdottoScontato?
P.S. e tra l'altro, visto che usi i generics, almeno parametrizza correttamente: Comparator<Prodotto> e poi il compare(Prodotto p1, Prodotto p2)

E' proprio questo il punto della questione, ed il mio problema, anche se sembra non sia chiaro. Certo il primo Comparatore che ho scritto era:
codice:
class Comparatore implements Comparator<Prodotto>{
public int compare(Prodotto prod1,Prodotto prod2){
if(prod1.getPrezzo() > prod2.getPrezzo()){
return -1;
}else if(prod1.getPrezzo() < prod2.getPrezzo()){
return 1;
}else{
return 0;
}
}
}
Facile come bere un bicchier d'acqua.
Ma questo comparatore mi ordina i Prodotti in ordine decrescente per prezzo e in ordine crescente per prezzo i ProdottoScontato, quindi all'inizio della collezione ho tutti ProdottoScontato in ordine crescente e dopo i Prodotto in ordine decrescente.
Pensando fosse un problema di cast ho implementato il comparatore utilazzando quella serie di if e la funzione getclass(), ma il risultato non è cambiato. Come posso ordinare con lo stesso criterio sia i Prodotto che i ProdottoScontato?
Infatti l'output con il comparatore proposto da @andbin è :
codice:
//CodiceProdotto Nome Prezzo
18 ProdScontato 4.0
9 Prod 10.0
16 Prod 7.0
14 Prod 6.0
24 Prod 4.0
25 Prod 3.0
27 Prod 2.0