Fournir une implémentation par défaut de compareTo qui utilise l'ordre du code source est bien ; le rendre définitif était un faux pas de la part de Sun. L'ordinal tient déjà compte de l'ordre de déclaration. Je suis d'accord que dans la plupart des situations un développeur peut simplement ordonner logiquement ses éléments, mais parfois on veut que le code source soit organisé d'une manière qui rende la lisibilité et la maintenance primordiales. Par exemple :
//===== 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");
L'ordre ci-dessus semble bon dans le code source, mais ce n'est pas la façon dont l'auteur pense que le compareTo devrait fonctionner. Le comportement souhaité pour le compareTo est d'avoir un classement par nombre d'octets. L'ordre du code source qui permettrait d'obtenir ce résultat dégrade l'organisation du code.
En tant que client d'une énumération, je ne pourrais pas me soucier moins de la façon dont l'auteur a organisé son code source. Je veux que leur algorithme de comparaison ait un sens, cependant. Sun a inutilement mis les auteurs de code source dans une impasse.