Rumah >Java >javaTutorial >Sekiranya Anda Menggunakan `instanceof` atau `getClass()` dalam Kaedah `.equals()` Java?

Sekiranya Anda Menggunakan `instanceof` atau `getClass()` dalam Kaedah `.equals()` Java?

Linda Hamilton
Linda Hamiltonasal
2024-11-27 01:23:13216semak imbas

Should You Use `instanceof` or `getClass()` in Java's `.equals()` Method?

Mengutamakan instanceof daripada getClass() dalam .equals() Implementations

Apabila menjana kaedah .equals() dalam Eclipse, pembangun dibentangkan dengan pilihan antara menggunakan "getClass()" atau "instanceof" untuk membandingkan jenis objek. Walaupun Eclipse lalai menggunakan "getClass()", secara amnya adalah lebih baik untuk memilih "instanceof" sebaliknya.

Sebab untuk Mengutamakan instanceof

  • Pematuhan kepada Prinsip Penggantian Liskov: Menggunakan sekatan "getClass()" kesamaan objek kepada objek kelas yang sama. Ini melanggar Prinsip Penggantian Liskov, yang menyatakan bahawa subkelas harus digantikan untuk superclass mereka dalam semua aspek. Akibatnya, penggunaan "getClass()" boleh membawa kepada gelagat yang tidak dijangka apabila membandingkan objek dari kelas yang berbeza tetapi jenis logik yang sama.
  • Keterluasan Yang Dipertingkat: Dengan menggunakan "instanceof", . kaedah equals() boleh mengenal pasti kesamaan antara objek subkelas yang berbeza. Ini membolehkan pelanjutan dan fleksibiliti yang lebih besar dalam kod, kerana subkelas baharu boleh diperkenalkan tanpa menjejaskan perbandingan kesaksamaan.

Amalan Terbaik untuk Pemeriksaan Null

Mengenai semakan nol, sememangnya amalan yang baik untuk mengalih keluar pernyataan "if (obj == null)" apabila menggunakan "instanceof". Ini kerana "instanceof" menjamin bahawa "obj" ialah tika kelas yang berkaitan dan objek nol tidak boleh menjadi contoh mana-mana kelas.

Argumen Sokongan

Josh Bloch, pengarang "Effective Java," menyokong penggunaan "instanceof" dalam pelaksanaan .equals(). Beliau berhujah bahawa ia memastikan pematuhan yang betul kepada Prinsip Penggantian Liskov dan menghalang tingkah laku yang mengejutkan dalam koleksi yang bergantung pada kaedah sama.

Sokongan tambahan untuk pendekatan ini boleh didapati dalam jawapan pada Stack Overflow dan dalam yang ketiga bab buku Bloch, "Jawa Berkesan."

Atas ialah kandungan terperinci Sekiranya Anda Menggunakan `instanceof` atau `getClass()` dalam Kaedah `.equals()` Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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