Casting in Java verstehen
Für unerfahrene Programmierer kann Casting ein verwirrendes Konzept sein. Es ist zwar klar, wann das Casting genutzt werden sollte, der Mechanismus bleibt jedoch unklar. Dieser Artikel befasst sich mit den Feinheiten des Castings in Java, insbesondere wenn es um das Casting von Objekten geht.
Beim Casting in Java muss der Compiler darüber informiert werden, dass ein Objekt vom Typ A tatsächlich von einem spezifischeren Typ B ist, und dadurch Zugriff darauf gewährt werden zusätzliche Methoden. Es handelt sich nicht um eine magische Konvertierung, sondern vielmehr um ein dem Compiler entgegengebrachtes Vertrauen. Zum Beispiel:
Object o = "str"; String str = (String)o;
Hier ist das Objekt o von Natur aus ein String, daher ist die Umwandlung in einen String gültig. Allerdings können zwei kritische Szenarien zu Fehlern führen. Erstens löst die Umwandlung zwischen nicht zusammenhängenden Vererbungshierarchien einen Compilerfehler aus:
String o = "str"; Integer str = (Integer)o; //Compilation fails
Zweitens führt die Umwandlung innerhalb derselben Hierarchie, aber mit einem ungültigen Zieltyp, zur Laufzeit zu einer ClassCastException:
Number o = new Integer(5); Double n = (Double)o; //ClassCastException
Diese Ausnahme weist auf eine Verletzung der Vertrauenswürdigkeit des Compilers hin. Der Programmierer behauptete, dass das Objekt entgegen der Realität von einem bestimmten Typ sei.
Casting ist vor allem beim Übergang von einem allgemeinen Typ zu einem spezifischeren Typ notwendig. Beispielsweise ist die Umwandlung einer Ganzzahl in eine Zahl akzeptabel, da alle Ganzzahlen Zahlen sind. Die in Java-5 eingeführten Generika haben die Notwendigkeit des Castings reduziert, indem sie eine sicherere Alternative bieten. Bei ordnungsgemäßer allgemeiner Verwendung wird eine ClassCastException praktisch eliminiert.
Das obige ist der detaillierte Inhalt vonWie funktioniert Casting in Java und wann kann es schief gehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!