提供使用源代码排序的 compareTo 的默认实现很好;最终确定是 Sun 的失误。序号已经说明了声明顺序。我同意在大多数情况下,开发人员可以对他们的元素进行逻辑排序,但有时人们希望源代码的组织方式使可读性和维护成为最重要的。例如:
//===== 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");
上面的顺序在源代码中看起来不错,但作者认为 compareTo 不是这样工作的。所需的 compareTo 行为是按字节数排序。使这种情况发生的源代码排序会降低代码的组织性。
作为枚举的客户,我不在乎作者如何组织他们的源代码。不过,我确实希望他们的比较算法有意义。 Sun 不必要地束缚了源代码编写者。