जब वे चर / मापदंडों के साथ काम कर रहे हैं जो केवल एक सीमित संख्या में मान ले सकते हैं, तो मैं हमेशा जावा के उपयोग की कोशिश करता हूं enum
, जैसे कि
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
जब तक मैं अपने कोड के अंदर रहता हूं, वह ठीक काम करता है। हालांकि, मुझे अक्सर अन्य कोड के साथ इंटरफ़ेस करने की आवश्यकता होती है जो सादे int
(या) का उपयोग करता हैString
जो समान उद्देश्य के लिए ) मूल्यों करते हैं, या मुझे एक डेटाबेस से पढ़ने / लिखने की आवश्यकता होती है जहां डेटा को एक संख्या या स्ट्रिंग के रूप में संग्रहीत किया जाता है।
उस स्थिति में, मैं एक एनम मूल्य को पूर्णांक के साथ जोड़ने के लिए एक सुविधाजनक तरीका चाहता हूं, जैसे कि मैं दोनों तरीकों को बदल सकता हूं (दूसरे शब्दों में, मुझे "प्रतिवर्ती एनम" की आवश्यकता है)।
एनम से इंट में जाना आसान है:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
तब मैं int मान को एक्सेस कर सकता हूं BonusType x = MONTHLY; int id = x.id;
।
हालाँकि, मैं रिवर्स के लिए कोई अच्छा तरीका नहीं देख सकता, यानी इंटम से एनुम तक जा रहा हूं। आदर्श रूप में, कुछ पसंद है
BonusType bt = BonusType.getById(2);
एकमात्र समाधान जो मैं ले सकता था, वे हैं:
- Enum में एक लुकअप विधि रखो, जो उपयोग करता है
BonusType.values()
मैप "int -> enum" को भरने के लिए है, फिर कैश करता है और लुकअप के लिए इसका उपयोग करता है। काम करेगा, लेकिन मुझे इस विधि की पहचान प्रत्येक enum में कॉपी करनी होगी जिसका मैं उपयोग करता हूं :-( - लुकअप विधि को एक स्थिर उपयोगिता वर्ग में रखें। तब मुझे केवल एक "लुकअप" विधि की आवश्यकता होगी, लेकिन मुझे मनमाने ढंग से एनम के लिए काम करने के लिए प्रतिबिंब के साथ फील करना होगा।
इस तरह की एक सरल (?) समस्या के लिए दोनों तरीके बहुत अजीब लगते हैं।
कोई अन्य विचार / अंतर्दृष्टि?
ordinal()
.ordinal()
), या क्या वे बाहरी ताकतों द्वारा तय किए गए हैं?