Mengatasi Java's equals() Method: Pitfalls and Solutions
Dalam pertemuan baru-baru ini, pembangun menemui isu yang membingungkan dengan overridden equals( ) kaedah di Jawa. Masalah timbul apabila objek Buku dicipta dengan hanya IDnya dan dihantar ke kaedah equals() diwarisi daripada kelas Objek sebagai boolean awam sama (Objek lain);. Overriding berlaku apabila tandatangan kaedah (termasuk jenis parameter) betul-betul sepadan dengan kaedah superclass. Sebaliknya, lebihan muatan melibatkan penciptaan kaedah dengan nama yang sama tetapi jenis parameter yang berbeza.
Dalam kes ini, pembangun pada mulanya melaksanakan versi terlebih muatan equals() yang mengambil parameter Buku dan bukannya parameter Objek.
Kebergantungan ArrayList pada Overridden equals()ArrayList, yang digunakan dalam kod pembangun, memanfaatkan kaedah equals() yang ditindih untuk perbandingan kandungan. Walaupun kaedah equals() terlebih beban berfungsi dengan baik untuk kebanyakan senario, ia menghadapi masalah keserasian dengan ArrayList.
Punca Isu
Masalahnya berpunca daripada fakta bahawa kaedah overloaded equals() tidak dapat sepadan dengan tandatangan kaedah overridden equals(Object). Akibatnya, ArrayList menggunakan pelaksanaan lalai daripada Object, yang tidak melakukan perbandingan objek.
Penyelesaian: Overriding Betul sama dengan()
Untuk menyelesaikan isu, pembangun membetulkan kaedah overridden equals() untuk mengambil parameter Objek, memastikan keserasian dengan ArrayList:
Penggunaan anotasi @Override membantu dalam mengesan penggantian yang tidak betul semasa penyusunan.
Kesimpulan
@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... }
Pengalaman ini menyerlahkan kepentingan mematuhi kaedah Java mengatasi konvensyen apabila melanjutkan kelas. Lebihan beban boleh membawa kepada isu keserasian, terutamanya apabila bekerja dengan kaedah equals() dan koleksi seperti ArrayList. Mengatasi kaedah yang betul memastikan konsistensi dan mengelakkan tingkah laku yang tidak dapat diramalkan.
Atas ialah kandungan terperinci Mengapakah Kaedah Overloading Java `equals()` Memecahkan Fungsi `ArrayList`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!