मैंने सोचा कि मूल्य() विधि मुझे enum (जैसा कि यहां बताया गया है) का आदेश दिया गया दृश्य देगा, लेकिन यह मामला यहां नहीं है। मैं बस एनम सदस्यों को उस क्रम में प्राप्त करता हूं जिसे मैंने उन्हें पत्र एनम कक्षा के भीतर बनाया था।
निश्चित रूप से, घोषणा का क्रम enums के लिए महत्वपूर्ण माना जाता है, इसलिए हमें खुशी है कि वे ठीक उसी क्रम में वापस आ गए हैं। उदाहरण के लिए, जब int i
एक enum मानों का प्रतिनिधित्व करता है, तो values()[i]
एनम उदाहरण खोजने के लिए एक बहुत ही सरल और कारगर तरीका है। विपरीत रूप से जाने के लिए, ordinal()
विधि एक enum उदाहरण की अनुक्रमणिका देता है।
क्या वर्णमाला क्रम में enum के मानों को आउटपुट करने का कोई तरीका है? क्या मुझे एक अलग तुलनित्र वस्तु की आवश्यकता होगी, या क्या ऐसा करने का एक अंतर्निहित तरीका है? मूल रूप से मैं मान वर्णानुक्रम getDescription() पाठ के आधार पर क्रमबद्ध करना चाहते हैं:
आप क्या कहते मूल्य कुछ सामान्य रूप में enums के लिए परिभाषित नहीं है। यहां, आपके संदर्भ में, आपका मतलब getDescription()
का परिणाम है।
जैसा कि आप कहते हैं, आप इन विवरणों के लिए एक तुलनात्मक बना सकते हैं।यही कारण है कि हो सकता है सही :-)
नोट सामान्य रूप में, आप इन उदाहरणों के लिए कई आदेशों की जरूरत सकता है कि:
- घोषणा आदेश (यह सरकारी आदेश है)
- वर्णन आदेश
- दूसरों के रूप में की जरूरत
,
प्रदर्शन के कारणों के लिए आप गणना विवरण संग्रहीत कर सकती है:
तुम भी DescriptionComparator की धारणा एक छोटा सा धक्का सकता है।
क्योंकि enums उत्तराधिकारी नहीं हो सकता है, कोड पुन: उपयोग enum वर्ग के बाहर होना चाहिए। मुझे उदाहरण हम अपने परियोजनाओं में प्रयोग करेंगे देता हूँ:
अब कोड नमूने ...
/** Interface for enums that have a description. */
public interface Described {
/** Returns the description. */
String getDescription();
}
public enum Letter implements Described {
// .... implementation as in the original post,
// as the method is already implemented
}
public enum Other implements Described {
// .... same
}
/** Utilities for enums. */
public abstract class EnumUtils {
/** Reusable Comparator instance for Described objects. */
public static Comparator<Described> DESCRIPTION_COMPARATOR =
new Comparator<Described>() {
public int compareTo(Described a, Described b) {
return a.getDescription().compareTo(b.getDescription);
}
};
/** Return the sorted descriptions for the enum. */
public static <E extends Enum & Described> List<String>
getSortedDescriptions(Class<E> enumClass) {
List<String> descriptions = new ArrayList<String>();
for(E e : enumClass.getEnumConstants()) {
result.add(e.getDescription());
}
Collections.sort(descriptions);
return descriptions;
}
}
// caller code
List<String> letters = EnumUtils.getSortedDescriptions(Letter.class);
List<String> others = EnumUtils.getSortedDescriptions(Other.class);
ध्यान दें कि EnumUtils
में जेनेरिक कोड न केवल एक enum वर्ग के लिए काम करता है, लेकिन आपकी प्रोजेक्ट में किसी भी एनम क्लास के लिए काम करता है जो Described
इंटरफ़ेस लागू करता है।
जैसा कि पहले कहा गया था, एनम्स के बाहर कोड रखने का बिंदु (जहां यह अन्यथा होगा) कोड का पुन: उपयोग करना है। यह दो enums के लिए बड़ा सौदा नहीं है, लेकिन हमारे पास हमारे प्रोजेक्ट में एक हजार से अधिक enums हैं, उनमें से कई एक ही इंटरफेस के साथ ...!
जो लेख आप लिंक करते हैं वह गलत नहीं है। वह जिस क्रम को संदर्भित करता है वह अनुक्रम है जिसमें उन्हें enum में टाइप किया गया था। कंपाइलर/रनटाइम enum मानों पर कोई विशेष सॉर्टिंग नहीं करता है। – Suppressingfire
मुझे यह लिंक यहां स्टैक ओवरफ्लो में मिला और मेरे लिए काम किया। http://stackoverflow.com/a/18416259/6301287 –