Không phải tất cả các đối tượng có thể được so sánh, nhưng tất cả các đối tượng có thể được kiểm tra sự bình đẳng. Nếu không có gì khác, người ta có thể thấy nếu hai đối tượng tồn tại ở cùng một vị trí trong bộ nhớ (đẳng thức tham chiếu).
Nó có ý nghĩa gì compareTo()
với hai Thread
đối tượng? Làm thế nào là một chủ đề "lớn hơn" khác? Làm thế nào để bạn so sánh hai ArrayList<T>
s?
Các Object
hợp đồng được áp dụng cho tất cả các lớp Java. Nếu thậm chí một lớp không thể so sánh với các thể hiện khác của lớp đó, thì Object
không thể yêu cầu nó là một phần của giao diện.
Joshua Bloch sử dụng các từ khóa "trật tự tự nhiên" khi giải thích lý do tại sao một lớp có thể muốn thực hiện Comparable
. Không phải mọi lớp đều có một trật tự tự nhiên như tôi đã đề cập trong các ví dụ của tôi ở trên, vì vậy không phải mọi lớp nên thực hiện Comparable
cũng như không nên Object
có compareTo
phương thức.
... compareTo
phương thức không được khai báo Object
. ... Nó tương tự như phương pháp Object
của equals
phương pháp, ngoại trừ việc nó cho phép so sánh thứ tự bên cạnh các so sánh đẳng thức đơn giản, và nó là chung chung. Bằng cách thực hiện Comparable
, một lớp chỉ ra rằng các thể hiện của nó có một trật tự tự nhiên .
Java hiệu quả, Ấn bản thứ hai : Joshua Bloch. Mục 12, Trang 62. Dấu chấm lửng loại bỏ các tham chiếu đến các chương và ví dụ mã khác.
Đối với trường hợp bạn làm muốn áp đặt một trật tự trên một phi Comparable
lớp mà không có một trật tự tự nhiên, bạn luôn có thể cung cấp một Comparator
ví dụ để giúp sắp xếp nó.