Rumah >Java >javaTutorial >Mengapa Kaedah Java `equals()` Saya Gagal dengan Koleksi?

Mengapa Kaedah Java `equals()` Saya Gagal dengan Koleksi?

Susan Sarandon
Susan Sarandonasal
2024-12-27 15:12:10600semak imbas

Why Does My Java `equals()` Method Override Fail with Collections?

Kaedah Java's Equals() Override: Isu Membingungkan Selesai

Apabila mengatasi kaedah equals() dalam Java, cabaran yang tidak dijangka boleh timbul. Artikel ini menangani kes tertentu di mana kaedah tidak berfungsi, yang membawa kepada pengalaman penyahpepijatan yang mengecewakan.

Ringkasnya, isu ini berpunca daripada penggantian kaedah equals() yang tidak betul. Secara khusus, kaedah itu ditakrifkan dengan parameter jenis Book dan bukannya Objek, seperti yang diperlukan oleh kaedah yang diwarisi daripada kelas Objek.

Rangka Kerja Koleksi Java, yang biasa digunakan untuk mengendalikan koleksi objek, menggunakan sama dengan yang diganti ( ) kaedah untuk menentukan kesaksamaan. Walau bagaimanapun, dalam contoh kod yang diberikan, kaedah terlebih beban sama dengan() dengan parameter Buku tidak serasi dengan rangka kerja ini. Akibatnya, perbandingan kesamaan dalam koleksi gagal secara tidak dapat diterangkan.

Untuk menyelesaikan kekeliruan ini, kaedah equals() mesti ditindih dengan betul seperti berikut:

@Override
public boolean equals(Object other) {
    if (other == null) return false;
    if (other == this) return true;
    if (!(other instanceof Book)) return false;
    Book otherBook = (Book) other;
    ...test other properties here...
}

Coretan kod ini mengatasi equals () kaedah dari kelas Objek, dengan parameter jenis Objek. Selain itu, anotasi @Override menyediakan semakan masa kompilasi untuk memastikan kaedah mengatasi kaedah superclass dengan betul.

Dengan menangani perbezaan halus tetapi kritikal ini antara beban lampau dan overriding, pengaturcara boleh mengelakkan perangkap yang sama dan mengekalkan kesaksamaan yang tepat perbandingan dalam kod Java mereka.

Atas ialah kandungan terperinci Mengapa Kaedah Java `equals()` Saya Gagal dengan Koleksi?. 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