Rumah >Java >javaTutorial >`instanceof` lwn. `Class.isAssignableFrom(...)`: Kaedah Mana Yang Harus Anda Pilih untuk Perbandingan Kelas Java?
Apabila membandingkan dua kelas dalam Java untuk menentukan jika satu adalah contoh yang lain, anda mempunyai dua pilihan: instanceof dan Class.isAssignableFrom(...). Walaupun kedua-dua kaedah menyediakan kefungsian yang serupa, ia berbeza dalam aspek tertentu.
Instanceof operator menyemak sama ada objek ialah tika kelas tertentu atau subkelas. Ia melakukan semakan statik pada masa penyusunan, memastikan bahawa kelas yang ditentukan diketahui pada ketika itu. Sintaksnya adalah mudah:
if (a instanceof B) { // ... }
Kaedah isAssignableFrom() menentukan sama ada kelas yang ditentukan atau mana-mana subkelasnya serasi dengan kelas objek tertentu. Ia membenarkan semakan dinamik, yang boleh berguna apabila kelas diketahui hanya pada masa jalan. Sintaksnya adalah seperti berikut:
if (B.class.isAssignableFrom(a.getClass())) { // ... }
Perbezaan utama terletak pada fakta bahawa instanceof memerlukan kelas B yang ditentukan untuk diketahui semasa penyusunan masa, manakala isAssignableFrom() tidak. Ini boleh menjadi kelebihan yang ketara apabila bekerja dengan kelas dinamik atau tidak diketahui.
Pertimbangkan senario berikut:
Object a = new MyObject(); if (a instanceof UnknownClass) { // Compilation error // ... }
Dalam contoh ini, menggunakan instanceof akan mengakibatkan ralat kompilasi kerana UnknownClass tidak diketahui pada masa penyusunan. Walau bagaimanapun, menggunakan isAssignableFrom() membenarkan semakan masa jalan:
if (UnknownClass.class.isAssignableFrom(a.getClass())) { // No error // ... }
Akhirnya, pilihan antara instanceof dan Class.isAssignableFrom(... ) bergantung pada keperluan khusus kod anda. Jika anda perlu melakukan semakan statik pada masa penyusunan, instanceof menyediakan cara yang mudah dan cekap. Walau bagaimanapun, jika anda perlu mengendalikan perhubungan kelas dinamik atau bekerja dengan kelas yang tidak diketahui pada masa penyusunan, isAssignableFrom() menawarkan fleksibiliti yang lebih besar.
Atas ialah kandungan terperinci `instanceof` lwn. `Class.isAssignableFrom(...)`: Kaedah Mana Yang Harus Anda Pilih untuk Perbandingan Kelas Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!