Il downcasting è talvolta necessario e appropriato. In particolare, è spesso appropriato nei casi in cui si hanno oggetti che possono o meno avere qualche abilità, e si desidera usare quell'abilità quando esiste mentre si maneggiano oggetti senza quell'abilità in qualche modo predefinito. Come semplice esempio, supponiamo che a String
sia chiesto se è uguale a qualche altro oggetto arbitrario. Affinché uno String
sia uguale all'altro String
, deve esaminare la lunghezza e l'array di caratteri di supporto dell'altra stringa. Se a String
viene chiesto se è uguale a a , il confronto dovrebbe usare un comportamento predefinito (riportando che l'altro oggetto non è uguale).Dog
, tuttavia, non può accedere alla lunghezza di Dog
, ma non dovrebbe; invece, se l'oggetto con cui String
si suppone che a si paragoni non è aString
Il momento in cui il downcasting dovrebbe essere considerato il più dubbio è quando l'oggetto che viene lanciato è "conosciuto" per essere del tipo giusto. In generale, se un oggetto è noto per essere un Cat
, si dovrebbe usare una variabile di tipo Cat
, piuttosto che una variabile di tipo Animal
, per fare riferimento ad esso. Ci sono momenti in cui questo non sempre funziona, tuttavia. Ad esempio, una Zoo
raccolta potrebbe contenere coppie di oggetti in slot di matrice pari / dispari, con l'aspettativa che gli oggetti in ciascuna coppia possano agire l'uno sull'altro, anche se non possono agire sugli oggetti in altre coppie. In tal caso, gli oggetti in ciascuna coppia dovrebbero comunque accettare un tipo di parametro non specifico in modo tale che possano, sintatticamente , passare gli oggetti da qualsiasi altra coppia. Quindi, anche se Cat
'splayWith(Animal other)
metodo avrebbe funzionato solo quando other
era a Cat
, Zoo
avrebbe dovuto essere in grado di passargli un elemento di un Animal[]
, quindi il suo tipo di parametro avrebbe dovuto essere Animal
piuttosto che Cat
.
Nei casi in cui il downcasting sia legittimamente inevitabile, si dovrebbe usare senza scrupoli. La domanda chiave è determinare quando si può ragionevolmente evitare il downcasting ed evitarlo quando sensibilmente possibile.