Tôi hiện đã có một ghi đè equals(Object)
trông như thế này:hashCode Overriding với bằng ghi đè bằng equalsIgnoreCase để kiểm tra bình đẳng
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (! (o instanceof Player)) return false;
Player p = (Player) o;
return getFirstName().equalsIgnoreCase(p.getFirstName()) &&
getLastName().equalsIgnoreCase(p.getLastName());
}
hashCode()
của tôi hiện trông như thế này:
@Override
public int hashCode() {
int result = 17;
result = 31 * result + getFirstName().toLowerCase().hashCode();
result = 31 * result + getLastName().toLowerCase().hashCode();
return result;
}
Câu hỏi của tôi là liên quan đến phương thức hashCode() được ghi đè của tôi. Tôi biết rằng tôi cần hashCode() để trả về cùng một giá trị cho hai đối tượng nếu chúng được coi là bằng nhau bằng phương thức equals (Object). Đường ruột của tôi cho tôi biết có một số trường hợp trường hợp hashCode() này sẽ vi phạm hợp đồng.
Có cách nào chấp nhận được để sử dụng phương thức equalsIgnoreCase (String) trong phương thức equals được ghi đè (Object) và tạo mã băm không vi phạm hợp đồng không?
Trong hashCode() kết quả = 31 ... nên kết quả * = 31 ... do đó, bạn không bị mất giá trị đã có trong đó. – Patashu
Ông có kết quả trong phương trình, kết quả 31 * (khác). Vì vậy, nó không bị mất. Chỉ cần 2 xu của tôi, nhưng tôi nghĩ bạn đang đi đúng hướng. Phương pháp equals của bạn có vẻ tốt với tôi. – Kyle
Tại sao mã của bạn vi phạm hợp đồng? Ruột của bạn phải lo lắng, đừng nghe nó;) – ddmps