Explizites Casting und ClassCastException in Java verstehen
In Java können wir explizites Casting verwenden, um ein Oberklassenobjekt einer Unterklassenvariablen zuzuweisen. Betrachten Sie beispielsweise den folgenden Code:
public class Animal { public void eat() {} } public class Dog extends Animal { public void eat() {} public static void main(String[] args) { Animal animal = new Animal(); Dog dog = (Dog) animal; } }
Obwohl der Code erfolgreich kompiliert wurde, führt die Ausführung der Zeile Dog dog = (Dog) animal; löst zur Laufzeit eine ClassCastException aus.
Warum tritt dieser Fehler auf?
Der Compiler lässt eine explizite Umwandlung zu, kann jedoch die Gültigkeit der Umwandlung zur Kompilierungszeit nicht sicherstellen. Wenn Sie ein Objekt von einer Oberklasse in eine Unterklasse umwandeln, weisen Sie den Compiler im Wesentlichen an, darauf zu vertrauen, dass das Objekt tatsächlich eine Instanz der Unterklasse ist.
In unserem Beispiel ist die Variable animal eine Instanz von Animal Klasse. Bei der Umwandlung in ein Dog-Objekt wird jedoch implizit davon ausgegangen, dass animal auf ein Dog-Objekt verweist, was nicht der Fall ist. Daher validiert die JVM diese Annahme zur Laufzeit und löst eine ClassCastException aus, wenn sie fehlschlägt.
Wie können wir solche Fehler verhindern?
Um explizites Casting sicher durchzuführen, sollten wir dies tun Führen Sie die folgenden Prüfungen durch:
Zusammenfassend lässt sich sagen, dass wir mit der expliziten Umwandlung die Typprüfung des Compilers außer Kraft setzen können. Es ist jedoch wichtig, vorsichtig vorzugehen und die Gültigkeit der Umwandlung zu überprüfen bevor Sie sich darauf verlassen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3