mybatis3中PerpetualCache中的equals和hashCode方法在第一行先判断getId() == null, 有点不能理解, 为什么要这个判断, 不是不可能为null吗。
代码如下:
@Override
public boolean equals(Object o) {
if (getId() == null) {
throw new CacheException("Cache instances require an ID.");
}
if (this == o) {
return true;
}
if (!(o instanceof Cache)) {
return false;
}
Cache otherCache = (Cache) o;
return getId().equals(otherCache.getId());
}
@Override
public int hashCode() {
if (getId() == null) {
throw new CacheException("Cache instances require an ID.");
}
return getId().hashCode();
}
Kaedah rangka kerja asas tidak dapat mengetahui semua penggunaan lapisan aplikasi Berkemungkinan besar sesetengah orang tidak mematuhi peraturan Untuk memastikan ketepatan program, adalah perlu untuk membuat beberapa kod pertahanan.
id menentukan keunikan cache, hashCode, kaedah sama untuk menentukan rujukan keunikan
Ini adalah tabiat pengaturcaraan yang baik
Apabila bekerja secara kolaboratif, anda tidak boleh menilai perjanjian lisan kami dengan mudah dilanggar oleh seseorang Untuk mengelakkan seseorang melakukan perkara sedemikian, semakan parameter adalah sangat bermakna dan perlu, yang juga memudahkan penyelesaian masalah
Not bad, saya belajar banyak
Bagaimana jika getId()==null, anda telah membalikkan sebab dan hasil, kerana ia tidak dibenarkan menjadi batal, jadi terdapat penghakiman jika jika ia adalah batal, pengecualian tersuai akan dilemparkan untuk memberitahu anda perkara itu ia tidak boleh menjadi
Ini adalah pelaksanaan strategi DBC
Terdapat tiga jenis DBC:
1.Post-conditions postcondition mewakili hasil yang pasti akan diperolehi dengan memanggil kaedah. Sama seperti penegasan, jika bahasa tidak menyokong penegasan, maka kita mesti menulis penegasan sendiri, yang didorong oleh ujian.
2.Pra-syarat prasyarat, yang menjamin terlebih dahulu bahawa pasca-syarat mesti memenuhi pra-syarat.
Prasyarat mesti dipenuhi, dan pasca syarat mesti direalisasikan Melalui gabungan prasyarat dan pasca syarat kontrak, tidak akan ada obligasi fungsian yang tersembunyi, supaya perkara-perkara itu dibentangkan dengan jelas. Hanya dengan cara ini reka bentuk boleh dilaksanakan ke dalam kod untuk memastikan panggilan objek biasa.
3. Invarian kelas invarian mewakili penegasan keadaan objek, yang harus dipenuhi selepas melakukan sebarang operasi Invarian masih mentakrifkan integriti agregat.