Trong Java, tôi có một lớp con Vertex
của lớp Java3D Point3f
. Bây giờ Point3f
tính equals()
dựa trên giá trị tọa độ của nó, nhưng đối với lớp Vertex
của tôi, tôi muốn được chặt chẽ hơn: hai đỉnh chỉ bằng nhau nếu chúng là cùng một đối tượng. Cho đến nay, như vậy tốt:Làm thế nào để tính toán hashCode() từ địa chỉ của đối tượng?
class Vertex extends Point3f {
// ...
public boolean equals(Object other) {
return this == other;
}
}
Tôi biết điều này là vi phạm hợp đồng của equals()
, nhưng kể từ khi tôi sẽ chỉ so sánh đỉnh đến đỉnh khác đây không phải là một vấn đề.
Bây giờ, để có thể đặt đỉnh vào một HashMap
, phương pháp hashCode()
phải trả lại kết quả phù hợp với equals()
. Nó hiện đang làm điều đó, nhưng có lẽ căn cứ giá trị trả về của nó trên các lĩnh vực của Point3f
, và do đó sẽ cung cấp cho va chạm băm cho các đối tượng khác nhau Vertex
với cùng tọa độ.
Vì vậy, tôi muốn căn cứ số hashCode()
trên địa chỉ của đối tượng, thay vì tính toán nó từ các trường của Vertex
. Tôi biết rằng lớp Object
thực hiện điều này, nhưng tôi không thể gọi phương thức hashCode()
vì Point3f
ghi đè nó.
Vì vậy, thực sự câu hỏi của tôi có hai phần:
- nên tôi thậm chí còn muốn như vậy một nông
equals()
? - Nếu có, thì làm cách nào để tôi nhận được địa chỉ của đối tượng để tính toán mã băm từ?
Chỉnh sửa: Tôi chỉ nghĩ về điều gì đó ... Tôi có thể tạo giá trị ngẫu nhiên int
để tạo đối tượng và sử dụng mã băm đó. Đó có phải là một ý tưởng tốt? Tại sao không)?
Thực ra ... đó chính xác là những gì tôi cần: D – Thomas