2017-08-11 17 views

Trả lời

4

Từ Collection JavaDoc:

Trong khi giao diện Collection thêm không quy định trong hợp đồng nói chung cho Object.equals, lập trình viên thực hiện các giao diện Collection "trực tiếp" (nói cách khác, tạo ra một lớp mà là Collection nhưng không phải là Set hoặc List) phải tập thể dục nếu họ chọn ghi đè Object.equals. Không cần phải làm như vậy, và quá trình hành động đơn giản nhất là dựa vào triển khai của đối tượng, nhưng người triển khai có thể muốn thực hiện "so sánh giá trị " thay cho so sánh tham chiếu mặc định ". (Các ListSet giao diện nhiệm vụ như vậy so sánh giá trị.)

Hợp đồng chung cho Object.equals bang phương pháp mà bằng phải đối xứng (nói cách khác, a.equals(b) khi và chỉ khi b.equals(a)). Hợp đồng cho List.equalsSet.equals tuyên bố rằng danh sách chỉ bằng các danh sách khác và đặt thành các nhóm khác. Do đó, phương thức tùy chỉnh cho lớp thu thập thực hiện không phải giao diện List cũng không phải Set phải trả về false khi bộ sưu tập này là so với bất kỳ danh sách hoặc bộ nào. (Theo logic đó, nó không thể viết một lớp mà thực hiện một cách chính xác cả Set và Danh mục giao diện.)

Trong khi giao diện Collection cho biết thêm không có quy định để vị tướng hợp đồng cho phương thức Object.hashCode, người lập trình nên lưu ý rằng bất kỳ lớp nào ghi đè phương thức Object.equals cũng phải ghi đè phương thức Object.hashCode để đáp ứng hợp đồng chung cho phương thức Object.hashCode. Cụ thể, c1.equals(c2) ngụ ý rằng c1.hashCode()==c2.hashCode().

1

Để trả lời câu hỏi cụ thể của bạn: tại sao lại có những phương pháp này? Nó được thực hiện đơn giản để thuận tiện để có thể bao gồm Java Docs đưa ra gợi ý về những gì người thực hiện nên làm với các phương thức này (ví dụ: so sánh sự bình đẳng của các giá trị chứ không phải là các tham chiếu).

0

Khi bất kỳ lớp nào triển khai Giao diện, nó sẽ tiêm/chấp nhận hợp đồng/quy tắc được xác định bởi giao diện.

Equalable & Hashable là hai hợp đồng/quy tắc được cung cấp mặc định. Bởi có điều này Nó giả định rằng bằng và hashCode cho một lớp nhất định được thực hiện một cách chính xác cho lớp đó.

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