Rumah > Java > javaTutorial > Kaedah `getClass()` lwn. `instanceof` dalam `.equals()` Java: Mana Yang Lebih Baik?

Kaedah `getClass()` lwn. `instanceof` dalam `.equals()` Java: Mana Yang Lebih Baik?

Barbara Streisand
Lepaskan: 2024-11-25 03:38:11
asal
676 orang telah melayarinya

`getClass()` vs. `instanceof` in Java's `.equals()` Method: Which is Better?

Penggunaan Pilihan getClass() vs. instanceof dalam Menjana .equals()

Apabila menggunakan penjana kod Eclipse untuk .equals() dan .hashCode(), anda mungkin menghadapi pilihan untuk menggunakan 'instanceof' untuk perbandingan jenis atau .getClass(). Pilihan lalai ialah .getClass(), tetapi artikel ini mengkaji sama ada terdapat sebarang kelebihan untuk menggunakan .getClass() berbanding instanceof.

Perbandingan Tanpa instanceof:

if (obj == null)
  return false;
if (getClass() != obj.getClass())
  return false;
Salin selepas log masuk

Perbandingan Penggunaan instanceof:

if (obj == null)
  return false;
if (!(obj instanceof MyClass))
  return false;
Salin selepas log masuk

Lazimnya, adalah dinasihatkan untuk menggunakan pilihan instanceof dan alih keluar semakan "if (obj == null)", kerana objek null pasti akan gagal instanceof. Walau bagaimanapun, adakah amalan ini sememangnya salah?

Argumen contohnya

Pakar Java terkenal Josh Bloch menyokong pendekatan ini, memetik alasan berikut:

  • Menggunakan getClass() mengehadkan kesamaan objek kepada hanya mereka yang tergolong dalam kelas yang sama dan jenis masa jalan.
  • Jika kelas dilanjutkan dengan kaedah yang tidak berbahaya, objek subkelas dan superclass mungkin tersilap dianggap tidak sama walaupun sifat penting yang sama.
  • Ini melanggar prinsip penggantian Liskov, berpotensi membawa kepada tingkah laku yang tidak dijangka.
  • Rangka kerja koleksi Java (cth., HashTable) sangat bergantung pada kaedah yang sama. Menggunakan .getClass(), objek daripada superclass mungkin tidak boleh diperoleh semula daripada jadual cincang apabila disoal dengan contoh subkelas disebabkan oleh ketidaksamaan yang dilihat.

Sumber Tambahan

  • [JADI jawapan](https://stackoverflow.com/questions/2810849/what-is-the-performance-complexity-of-using-instanceof-keyword-in-java)
  • [Bab Java yang berkesan 3](https://books.google.com/books?id=XY6a0H0G7LsC&pg=SA3-PA34&lpg=SA3-PA34&dq=Josh Bloch instanceof getClass equals&source=bl&ots=1P2j4a8S-Q&sig=ACfU3U0pWgTLs2MNGhf5Nq4Giq6hYH8MgQ&hl=ms)

Atas ialah kandungan terperinci Kaedah `getClass()` lwn. `instanceof` dalam `.equals()` Java: Mana Yang Lebih Baik?. 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