Rumah >Java >javaTutorial >`getClass()` lwn. `instanceof` dalam `equals()`: Mana Yang Perlu Anda Gunakan?
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
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!