Downcasting ist manchmal notwendig und angemessen. Insbesondere ist es häufig in Fällen angebracht, in denen Objekte vorhanden sind, die möglicherweise über eine bestimmte Fähigkeit verfügen oder nicht, und diese Fähigkeit möchte man verwenden, wenn sie vorhanden ist, während Objekte ohne diese Fähigkeit auf eine bestimmte Standardweise behandelt werden. Als einfaches Beispiel wird angenommen, dass a String
gefragt wird, ob es einem anderen beliebigen Objekt entspricht. Damit eins String
dem anderen entspricht String
, muss es die Länge und das Hintergrundzeichenarray der anderen Zeichenfolge untersuchen. Wenn a String
gefragt wird, ob es gleich a Dog
ist, kann es nicht auf die Länge von zugreifen Dog
, aber es sollte nicht müssen; stattdessen, wenn das Objekt, mit dem sich a String
vergleichen soll, nicht a istString
sollte der Vergleich ein Standardverhalten verwenden (Meldung, dass das andere Objekt nicht gleich ist).
Die Zeit, in der das Herabwerfen als am zweifelhaftesten angesehen werden sollte, ist die Zeit, in der "bekannt" ist, dass das zu gießende Objekt vom richtigen Typ ist. Wenn bekannt ist, dass ein Objekt ein Objekt ist Cat
, sollte im Allgemeinen eine Variable vom Typ Cat
anstelle einer Variablen vom Typ verwendet werden Animal
, um auf dieses Objekt zu verweisen. Es gibt Zeiten, in denen dies jedoch nicht immer funktioniert. Beispielsweise kann eine Zoo
Sammlung Paare von Objekten in Slots für gerade / ungerade Arrays enthalten, mit der Erwartung, dass die Objekte in jedem Paar aufeinander einwirken können, auch wenn sie nicht auf die Objekte in anderen Paaren einwirken können. In einem solchen Fall müssten die Objekte in jedem Paar immer noch einen unspezifischen Parametertyp akzeptieren, sodass sie syntaktisch die Objekte von jedem anderen Paar übergeben . Also, auch wenn Cat
's gehtplayWith(Animal other)
Verfahren funktionieren würde nur dann , wenn other
eine war Cat
, die Zoo
in der Lage sein müssen , wäre es ein Element eines zu übergeben Animal[]
, so dass ihr Parametertyp sein müsste, Animal
als vielmehr Cat
.
In Fällen, in denen Downcasting legitimerweise unvermeidbar ist, sollte man es ohne Bedenken anwenden. Die entscheidende Frage ist, wann man Downcasting sinnvoll vermeiden und wann es sinnvoll möglich ist.