Khi chúng tôi triển khai Interface
, chúng tôi inject (or accept)
hợp đồng được xác định bởi giao diện.
Equalable
& Hashable
là hai hợp đồng khác nhau. Nhưng nếu chúng ta xem xét kỹ thì chúng ta sẽ thấy rằng cả hai đều phụ thuộc vào nhau, có nghĩa là chúng là một phần của single interface
, giống như EqualableAndHashable
.
Bây giờ câu hỏi hiển nhiên là, liệu chúng có phải là một phần của giao diện EqualableAndHashable
mới này hay Object
không?
Hãy tìm hiểu. Chúng tôi có == (equal operator)
để kiểm tra tính bình đẳng của hai đối tượng. Toán tử ==
xác nhận xem các giá trị/tham chiếu có bằng nhau cho hai đối tượng nguyên thủy khác nhau hay không. Nhưng điều này không phải lúc nào cũng có thể trả lời chỉ bằng cách kiểm tra với toán tử ==
.
Bây giờ câu hỏi là, liệu sự bình đẳng này, which is also a contract
, có nên được tiêm qua giao diện hoặc một phần của lớp Object không?
Nếu chúng ta hãy xem, chúng ta không thể chỉ nói một cái gì đó như:
TypeX
không đảm bảo hợp đồng bình đẳng.
Nó sẽ trở thành sự hỗn loạn nếu một số loại đối tượng cung cấp sự bình đẳng và một số loại thì không. Điều này có nghĩa là đối tượng của TypeX
phải tôn trọng hợp đồng bình đẳng là đúng cho tất cả các loại đối tượng khác. Vì vậy, nó không phải tiêm bình đẳng từ một giao diện, bởi vì bình đẳng nên là một phần của hợp đồng cho bất kỳ đối tượng theo mặc định, nếu không nó sẽ tạo ra sự hỗn loạn.
Vì vậy, chúng tôi cần các đối tượng để đưa ra triển khai equals
. Nhưng nó không thể chỉ thực hiện phương thức equals
, nó cũng cần triển khai phương thức hashcode
.
Hãy xem [tại đây] (http://msmvps.com/blogs/jon_skeet/archive/2008/12/05/redesigning-system-object-java-lang-object.aspx) để có bài viết hay về nội dung nào đó liên quan (bởi Jon Skeet). –
liên kết dường như đã chết. [This] (http://codeblog.jonskeet.uk/2008/12/05/redesigning-system-object-java-lang-object/) có thể là cùng một bài viết. – tkokasih