Cung cấp một triển khai mặc định của CompareTo sử dụng thứ tự mã nguồn là tốt; khiến nó cuối cùng là một bước sai lầm của Sun. Thứ tự đã tính đến thứ tự khai báo. Tôi đồng ý rằng trong hầu hết các tình huống, nhà phát triển chỉ có thể sắp xếp thứ tự các phần tử của họ một cách hợp lý, nhưng đôi khi người ta muốn mã nguồn được tổ chức theo cách làm cho khả năng đọc và bảo trì là điều 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 là cách tác giả tin rằng CompareTo sẽ hoạt động. Hành vi CompareTo mong muốn là có thứ tự theo số byte. Thứ tự mã nguồn có thể làm cho điều đó xảy ra làm suy giảm tổ chức của mã.
Là một khách hàng của một bảng liệt kê, tôi không thể quan tâm hơn đến cách tác giả tổ chức mã nguồn của họ. Tuy nhiên, tôi muốn thuật toán so sánh của họ có ý nghĩa nào đó. Sun đã đặt những người viết mã nguồn vào một ràng buộc một cách không cần thiết.