Rumah > Java > javaTutorial > teks badan

Mengapa Java Melemparkan ClassCastException Semasa Casting Eksplisit?

Barbara Streisand
Lepaskan: 2024-11-11 16:52:03
asal
483 orang telah melayarinya

Why Does Java Throw a ClassCastException During Explicit Casting?

Memahami Casting Eksplisit dan ClassCastException dalam Java

Dalam Java, kita boleh menggunakan hantaran eksplisit untuk menetapkan objek superclass kepada pembolehubah subkelas. Sebagai contoh, pertimbangkan kod berikut:

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;
    }
}
Salin selepas log masuk

Walaupun kod berjaya disusun, melaksanakan baris Anjing anjing = (Anjing) haiwan; melontar ClassCastException pada masa jalan.

Mengapa ralat ini berlaku?

Pengkompil membenarkan penghantaran eksplisit, tetapi ia tidak dapat memastikan kesahihan hantaran pada masa penyusunan. Apabila anda menghantar objek daripada superclass ke subclass, anda pada asasnya mengarahkan pengkompil untuk mempercayai bahawa objek itu sebenarnya adalah instance subclass.

Dalam contoh kami, haiwan boleh ubah ialah contoh Haiwan kelas. Walau bagaimanapun, menghantarnya ke objek Anjing secara tersirat mengandaikan bahawa haiwan merujuk kepada objek Anjing, yang tidak berlaku. Oleh itu, JVM mengesahkan andaian ini pada masa jalan dan membuang ClassCastException apabila ia gagal.

Bagaimanakah kita boleh menghalang ralat sedemikian?

Untuk melakukan penghantaran eksplisit dengan selamat, kita harus lakukan semakan berikut:

  1. Sahkan bahawa objek itu adalah contoh subjenis yang dijangkakan: Gunakan operator instanceof untuk mengesahkan bahawa objek boleh diberikan kepada subkelas yang dikehendaki.
  2. Kendalikan ClassCastException dengan baik: Jika pelakon gagal, kita boleh tangkap ClassCastException dan kendalikannya dengan sewajarnya.

Ringkasnya, jelas pemutus membolehkan kami mengatasi semakan jenis pengkompil, tetapi adalah penting untuk mendekatinya dengan berhati-hati dan mengesahkan kesahihan pelakon sebelum bergantung padanya.

Atas ialah kandungan terperinci Mengapa Java Melemparkan ClassCastException Semasa Casting Eksplisit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan