2012-05-19 14 views
7

मैं इस तरह enum हैजावा कस्टम enum मूल्य Enum को

public enum Sizes { 
    Normal(232), Large(455); 

    private final int _value; 

    Sizes(int value) { 
     _value = value; 
    } 

    public int Value() { 
     return _value; 
    } 
} 

अब मैं Sizes.Normal.Value कॉल कर सकते हैं() पूर्णांक मान प्राप्त करने के लिए है, लेकिन मैं कैसे पूर्णांक मान वापस परिवर्तित enum के लिए?

क्या अब मैं क्या है:

public Sizes ToSize(int value) { 
    for (Sizes size : Sizes.values()) { 
     if (size.Value() == value) 
      return size; 
    } 
    return null; 
} 

लेकिन वह ऐसा करने के लिए एक ही रास्ता है? जावा जावा काम करता है?

+1

[जावा एनम रिवर्स लुक-अप सर्वश्रेष्ठ अभ्यास] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/5316311/java-enum-reverse-look-up-best-practice) – bmargulies

उत्तर

8

हां इस तरह किया जाता है, आम तौर पर यह enum के लिए एक स्थिर विधि जोड़कर किया जाता है। इसके बारे में सोचो; आप enum पर 10 फ़ील्ड हो सकता है। क्या आप जावा से उन सभी के लिए लुकअप सेट अप करने की उम्मीद करते हैं?

यहां बिंदु यह है कि जावा enums के पास 'मान' नहीं है। उनके पास पहचान और एक ordinal, प्लस जो भी आप अपने लिए जोड़ते हैं। यह सी # से अलग है, जो इसके बजाय मनमानी पूर्णांक मान रखने में सी ++ का पालन करता है।

+2

मैंने एक स्थैतिक डालने की कोशिश की हैश मैप अपने enum में, लेकिन ऐसा प्रतीत होता है कि आप इसे enum कन्स्ट्रक्टर के भीतर से भरने की अनुमति नहीं है। 1+ –

+0

अच्छी तरह से मैं अभी भी पसंद करता हूं कि सी # कैसे enums संभालती है। यह बहुत तेज़ है। Enum एक पूर्णांक पहचानकर्ता होने का मानना ​​है, पूरे वर्ग नहीं :) – xmen

+0

आपको इसे स्थिर ब्लॉक में प्रारंभ करने की आवश्यकता हो सकती है। स्थिर निजी हैश मैप मानचित्र = नया हैश मैप ; और फिर ctor में डालता है? – bmargulies

1

यह थोड़ी देर के बाद से मैंने जावा के साथ काम किया था, लेकिन अगर मुझे सही याद है, तो आपके _value फ़ील्ड और एनम के ordinal के बीच कोई संबंध नहीं है। उदाहरण के लिए, AFAIK आपके पास _value के साथ दो प्रविष्टियां हो सकती हैं। जैसा कि @bmargulies ने इंगित किया है, आप enum में कई फ़ील्ड हो सकते हैं, और कुछ भी आपको (या सभी) के लिए अलग-अलग मानों का उपयोग करने के लिए बाध्य नहीं करता है।

this related question भी देखें। जाहिर है, आप सीधे अपनी प्रविष्टियों के ordinal सेट नहीं कर सकते हैं।

+0

यही कारण है कि मैंने पूछा, मैं सोच रहा था कि जावा में सी # में अंतर्निहित समर्थन हो सकता है लेकिन मुझे सबकुछ लिखना है। यह सी ++ लॉल में काम करने की तरह है – xmen