Cung cấp triển khai mặc định compareTo sử dụng thứ tự mã nguồn là tốt; làm cho nó cuối cùng là một sai lầm trên một phần của Sun. Thứ tự đã chiếm thứ tự khai báo. Tôi đồng ý rằng trong hầu hết các trường hợp, nhà phát triển chỉ có thể đặt hàng một cách hợp lý các yếu tố của họ, nhưng đôi khi người ta muốn mã nguồn được tổ chức theo cách giúp dễ đọc và bảo trì là tối quan trọng. Ví dụ:
//===== SI BYTES (10^n) =====//
/** 1,000 bytes. */ KILOBYTE (false, true, 3, "kB"),
/** 106 bytes. */ MEGABYTE (false, true, 6, "MB"),
/** 109 bytes. */ GIGABYTE (false, true, 9, "GB"),
/** 1012 bytes. */ TERABYTE (false, true, 12, "TB"),
/** 1015 bytes. */ PETABYTE (false, true, 15, "PB"),
/** 1018 bytes. */ EXABYTE (false, true, 18, "EB"),
/** 1021 bytes. */ ZETTABYTE(false, true, 21, "ZB"),
/** 1024 bytes. */ YOTTABYTE(false, true, 24, "YB"),
//===== IEC BYTES (2^n) =====//
/** 1,024 bytes. */ KIBIBYTE(false, false, 10, "KiB"),
/** 220 bytes. */ MEBIBYTE(false, false, 20, "MiB"),
/** 230 bytes. */ GIBIBYTE(false, false, 30, "GiB"),
/** 240 bytes. */ TEBIBYTE(false, false, 40, "TiB"),
/** 250 bytes. */ PEBIBYTE(false, false, 50, "PiB"),
/** 260 bytes. */ EXBIBYTE(false, false, 60, "EiB"),
/** 270 bytes. */ ZEBIBYTE(false, false, 70, "ZiB"),
/** 280 bytes. */ YOBIBYTE(false, false, 80, "YiB");
Thứ tự trên có vẻ tốt trong mã nguồn nhưng không phải tác giả tin rằng compareTo hoạt động như thế nào. Hành vi compareTo mong muốn là đặt hàng theo số byte. Việc đặt mã nguồn sẽ làm cho điều đó xảy ra làm giảm sự tổ chức của mã.
Là khách hàng của một điều tra, tôi không thể quan tâm ít hơn cách tác giả đã tổ chức mã nguồn của họ. Tuy nhiên, tôi không muốn thuật toán so sánh của họ có ý nghĩa gì đó. Sun đã không cần thiết phải đưa các nhà văn mã nguồn vào một ràng buộc.
Các bộ so sánh tùy chỉnh chỉ thực sự hiệu quả khi cung cấp Enum cho Bộ sưu tập. Nó không giúp ích nhiều nếu bạn muốn so sánh trực tiếp. –
Vâng, đúng vậy. new MyEnumComparator.compare (enum1, enum2). Et voilá. – Bombe
@martinoconnor & Bombe: Tôi đã đưa ý kiến của bạn vào câu trả lời. Cảm ơn! –