من در حال نوشتن برخی از کد های تست جاوا بودم که با شدت اینترنت مواجه شدم
equals
روش. علی رغم سادگی ظاهری ، این یک مشکل پیچیده است.
می خواهم تأکید کنم که این یک مسئله خاص جاوا نیست. به عنوان مثال C # روشی همولوگ دارد.
کمی از زمینه جاوا
Object
کلاس ریشه هر کلاس است. این روش های مختلفی را تعریف می کند و
equals
یکی از آنهاست به طور پیش فرض این روش یک رفتار ساده دارد: یک شی x فقط با خودش برابر است. هر شی دیگری متفاوت است.
بدیهی است که
equals
روش دارای خصوصیات مشترک یک رابطه معادل است. این است بازتابنده: x برابر با x است ؛ این است متقارن: اگر x برابر با y باشد ، y برابر است با x ؛ و به همین ترتیب …
بعلاوه یک رابطه منطقی پیوند می خورد
equals
و
hashCode
روش. دومی هش شی returns را برمی گرداند. در این زمینه این یک نمایش عددی صحیح از شی است. بنابراین اگر دو جسم برابر هستند ، باید هش آنها نیز برابر باشد.
مشکل
من یک مثال ساده کد را برای برجسته کردن مسئله اصلی استفاده می کنم. اینجا نقطه شروع است:
interface Book {
String title();
String author();
}
final class DbBook implements Book {
...
}
می توانیم از a
Book
عنوان آن و نویسنده آن. آ
DbBook
نمونه نشان دهنده کتابی است که در یک پایگاه داده ذخیره شده است.
همانطور که گفتم
Object
کلاس ریشه هر کلاس است. این بدان معنی است که
DbBook
…