Rumah > Java > javaTutorial > `getClass()` lwn. `instanceof` dalam `equals()`: Mana Yang Perlu Anda Gunakan?

`getClass()` lwn. `instanceof` dalam `equals()`: Mana Yang Perlu Anda Gunakan?

Linda Hamilton
Lepaskan: 2024-12-03 10:59:08
asal
640 orang telah melayarinya

`getClass()` vs. `instanceof` in `equals()`: Which Should You Use?

Perlukah Anda Menggunakan 'getClass()' atau 'instanceof' dalam Kaedah .equals() Anda?

Apabila menjana .equals() kaedah menggunakan Eclipse, anda mempunyai pilihan antara menggunakan 'instanceof' atau '.getClass()' untuk membandingkan jenis. Secara lalai, Eclipse menggunakan '.getClass()', menyebabkan ramai pengaturcara tertanya-tanya sama ada mereka perlu bertukar kepada 'instanceof'.

Apakah Perbezaannya?

.getClass() membandingkan secara langsung jenis masa jalan dua objek, manakala instanceof menyemak sama ada objek ialah tika kelas atau antara muka tertentu. Contohnya:

if (getClass() != obj.getClass()) // Using getClass()
if (!(obj instanceof MyClass)) // Using instanceof
Salin selepas log masuk

Yang Mana Satu Yang Perlu Anda Gunakan?

Menurut pakar Java Josh Bloch, 'instanceof' ialah pendekatan pilihan kerana ia tidak menyekat kesamaan dengan jenis masa jalan yang sama. Ini bermakna anda boleh melanjutkan kelas dan menambah kaedah tanpa menjejaskan kesamaan objek yang berkongsi aspek penting yang sama.

Selain itu, ia sejajar dengan prinsip penggantian Liskov, yang menyatakan bahawa subkelas sepatutnya boleh digunakan menggantikan kelas supernya tanpa melanggar kod. Menggunakan '.getClass()' melanggar prinsip ini, yang membawa kepada gelagat yang tidak dijangka dalam koleksi seperti HashTable.

Ringkasnya, 'instanceof' memberikan lebih kefleksibelan dan disyorkan untuk kaedah .equals(). Walaupun anda boleh mengalih keluar semakan 'if (obj == null)' dengan 'instanceof', secara amnya anda dinasihatkan untuk menyimpannya untuk kejelasan dan kesempurnaan.

Atas ialah kandungan terperinci `getClass()` lwn. `instanceof` dalam `equals()`: Mana Yang Perlu Anda Gunakan?. 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