2011-01-14 31 views
6

Dường như hashCode() và equals() được khai báo là cuối cùng. Vì vậy, việc ghi đè việc triển khai là không thể. Nó cũng nói rằng bằng() trả về true nếu các đối tượng là JavaScript giống hệt nhau (ba bằng). Tôi không hoàn toàn chắc chắn điều đó có nghĩa là tạo ra hai JavaScriptObject giống hệt nhau trong GWT và so sánh chúng với equals() trả về false. Có vẻ như hashcode() sử dụng bộ đếm tăng đơn điệu để gán mã băm cho đối tượng JavaScript bên dưới. Nếu tôi muốn lưu trữ JavaScriptObjects trong một Set thì điều này sẽ phức tạp. Bất kì sự trợ giúp nào đều được đánh giá cao.Cách tốt nhất để so sánh hai JavaScriptObject trong GWT là gì?

Trả lời

5

Tùy thuộc vào tiêu chí bình đẳng bạn muốn sử dụng cho trường hợp của mình.

  • Nếu bạn muốn nhận dạng đối tượng, bạn có thể sử dụng hàm được xác định trước() và hashCode() - và đặt JavaScriptObject trực tiếp vào HashSet.
  • Nếu bạn cần một khái niệm bình đẳng khác, bạn có thể viết Công cụ so sánh của riêng mình và đặt JavaScriptObjects vào, ví dụ: một TreeSet, được tạo bởi TreeSet(comparator) mới.
  • Nếu bạn cần đặt JavaScriptObject trong một HashSet (không phải là một TreeSet) và vẫn cần một khái niệm bình đẳng khác, bạn không thể đặt JavaScriptObject trực tiếp trong Tập hợp. Sau đó, bạn phải viết một lớp bao bọc, chứa JavaScriptObject và thực hiện equals() và hashCode().
+0

Cảm ơn lời khuyên của Chris. – affablebloke

+0

Viết một lớp bao bọc chung thực hiện equals() và hashCode() của riêng nó là giải pháp, vì tôi đang sử dụng MultiSelectionModel từ GWT và nội bộ bên trong của MultiSelectionModel sử dụng HashMap và HashSet. – affablebloke

Các vấn đề liên quan