No alt. Ogni oggetto a runtime mantiene una informazione precisa e completa sul suo tipo (a parte i tipi parametrici dei generics, per via della "erasure" ... ma è un altro discorso).Originariamente inviato da ragnonerodocet
devo effettuare certamente un casting, dato che il metodo next() della classe Iterator restituisce un Object, ma com'e' possibile che a run time la JVM si accorga del reale tipo dell'oggetto se il metodo e' eseguito su una variabile di tipo PricedItem???
next() ha come tipo statico di ritorno un Object ... non vuol dire che l'oggetto restituito è davvero di tipo Object. Sicuramente "è-un" Object, cioè deriva da Object.
Nella riga:
item = (PricedItem)it.next();
c'è un "down-cast" che è quindi soggetto ad un controllo a runtime da parte della JVM.
Se l'oggetto restituito da next() è realmente un Book, allora la JVM "sa" che è un PricedItem, quindi il cast ha successo. Se l'oggetto non è un PricedItem, allora la JVM lancia ClassCastException.