Es ist in Ordnung, eine Standardimplementierung von compareTo bereitzustellen, die die Quellcode-Reihenfolge verwendet. es endgültig zu machen war ein Fehltritt von Suns Seite. Die Ordnungszahl berücksichtigt bereits die Deklarationsreihenfolge. Ich bin damit einverstanden, dass ein Entwickler in den meisten Situationen seine Elemente nur logisch ordnen kann, aber manchmal möchte man, dass der Quellcode so organisiert ist, dass Lesbarkeit und Wartung an erster Stelle stehen. Beispielsweise:
//===== 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");
Die obige Reihenfolge sieht im Quellcode gut aus, aber der Autor ist nicht der Meinung, dass compareTo funktionieren sollte. Das gewünschte compareTo-Verhalten besteht darin, dass die Reihenfolge nach Anzahl der Bytes erfolgt. Die Reihenfolge des Quellcodes, die dies bewirken würde, verschlechtert die Organisation des Codes.
Als Kunde einer Aufzählung ist es mir egal, wie der Autor seinen Quellcode organisiert hat. Ich möchte jedoch, dass ihr Vergleichsalgorithmus einen Sinn ergibt. Sun hat Quellcode-Schreiber unnötigerweise in eine Bindung gebracht.