तुलना का एक डिफ़ॉल्ट कार्यान्वयन प्रदान करना जो स्रोत-कोड ऑर्डरिंग का उपयोग करता है ठीक है; इसे अंतिम बनाना सूर्य के हिस्से पर एक गलतफहमी थी। Ordinal पहले से ही घोषणा आदेश के लिए खाते हैं। मैं मानता हूं कि ज्यादातर स्थितियों में एक डेवलपर तर्कसंगत रूप से अपने तत्वों को आदेश दे सकता है, लेकिन कभी-कभी कोई स्रोत कोड को ऐसे तरीके से व्यवस्थित करना चाहता है जो पठनीयता और रखरखाव को सर्वोपरि बना देता है। उदाहरण के लिए:
//===== 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 काम करना चाहिए है। वांछित तुलना व्यवहार के लिए बाइट्स की संख्या के अनुसार आदेश है। स्रोत-कोड ऑर्डरिंग जो ऐसा करेगा, कोड के संगठन को खराब कर देगा।
एक गणना के ग्राहक के रूप में मैं लेखक की स्रोत कोड को व्यवस्थित करने के तरीके की परवाह नहीं कर सका। मैं उनकी तुलना एल्गोरिदम को किसी प्रकार की समझ बनाने के लिए चाहता हूं, हालांकि। सूर्य ने अनावश्यक रूप से स्रोत कोड लेखकों को एक बाध्य में रखा है।
कस्टम तुलनाकर्ता एक संग्रह में एनम की आपूर्ति करते समय केवल वास्तव में प्रभावी होते हैं। यदि आप प्रत्यक्ष तुलना करना चाहते हैं तो इससे ज्यादा मदद नहीं मिलती है। –
हाँ, यह करता है। नया MyEnumComparator.compare (enum1, enum2)। और voilá। – Bombe
@ मार्टिनोकोनर और बॉम्बे: मैंने आपकी टिप्पणियों को उत्तर में शामिल किया है। धन्यवाद! –