2009-07-01 2 views

उत्तर

252

जावा एनम्स सी या सी ++ एनम्स की तरह नहीं हैं, जो वास्तव में पूर्णांक के लिए केवल लेबल हैं।

जावा enums कक्षाओं की तरह अधिक लागू किया जाता है - और वे भी कई विशेषताओं हो सकता है।

public enum Ids { 
    OPEN(100), CLOSE(200); 

    private final int id; 
    Ids(int id) { this.id = id; } 
    public int getValue() { return id; } 
} 

बड़ा अंतर यह है कि वे प्रकार सुरक्षित जिसका मतलब है कि आप एक आकार चर करने के लिए एक रंग enum बताए बारे में चिंता करने की जरूरत नहीं है कर रहे हैं।

अधिक के लिए http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html देखें।

+0

के लिए निजी संशोधक अनावश्यक है, आपके कथन के आधार पर, अनुक्रमिक पूर्णांक (सी ++ एनम के समान) के एक एनम को बनाने के लिए जावा का उपयोग करके सबसे अच्छा अभ्यास होगा, एक सरणी या कुछ में एक इंडेक्स के लिए, लिखना होगा: enum आईडी { NAME (0), एजीई (1), HEIGHT (2), वजन (3); } धन्यवाद, -bn –

+0

संभवतः, और विशेष रूप से यदि आप कभी भी अभिन्न मूल्यों को क्रमबद्ध करते हैं। – lavinio

+1

क्या आप कृपया बता सकते हैं कि फ़ंक्शन में इस enum का उपयोग कैसे करें? –

73

हां। आप संख्यात्मक मानों तो की तरह, enum के लिए निर्माता को पारित कर सकते हैं:

enum Ids { 
    OPEN(100), 
    CLOSE(200); 

    private int value;  

    private Ids(int value) { 
    this.value = value; 
    } 

    public int getValue() { 
    return value; 
    } 
} 

अधिक जानकारी के लिए Sun Java Language Guide देखें।

+0

कूल। क्या मिश्रण करना संभव है? अर्थात। केवल चुने गए एनम मानों को संख्या असाइन करें। –

+0

एन्युम कन्स्ट्रक्टर –

10

यदि आप बहुत बड़े enum प्रकारों का उपयोग करते हैं, तो निम्नलिखित उपयोगी हो सकते हैं;

10

क्या इस तरह से उपयोग करने के बारे:

public enum HL_COLORS{ 
      YELLOW, 
      ORANGE; 

      public int getColorValue() { 
       switch (this) { 
      case YELLOW: 
       return 0xffffff00; 
      case ORANGE: 
       return 0xffffa500;  
      default://YELLOW 
       return 0xffffff00; 
      } 
      } 
} 

केवल एक विधि है ..

आप स्थिर विधि का उपयोग करें और Enum पैरामीटर की तरह के रूप में पारित कर सकते हैं:

public enum HL_COLORS{ 
      YELLOW, 
      ORANGE; 

      public static int getColorValue(HL_COLORS hl) { 
       switch (hl) { 
      case YELLOW: 
       return 0xffffff00; 
      case ORANGE: 
       return 0xffffa500;  
      default://YELLOW 
       return 0xffffff00; 
      } 
      } 

ध्यान दें कि ये दो तरीके कम स्मृति और अधिक प्रक्रिया इकाइयों का उपयोग करते हैं .. मैं नहीं ' टी यह सबसे अच्छा तरीका है लेकिन यह सिर्फ एक और दृष्टिकोण है।

+1

दूसरे उदाहरण में 'getColorValue() 'सिंक्रनाइज़ क्यों किया जाता है? – josaphatv

+0

यह समझ में नहीं आता .. मैंने इसे कोड से हटा दिया .. धन्यवाद –

2

आप C/C++ (आधार संख्या और nexts वृद्धिशील) की enum का अनुकरण करना चाहते हैं:

enum ids { 
    OPEN, CLOSE; 
    // 
    private static final int BASE_ORDINAL = 100; 
    public int getCode() { 
     return ordinal() + BASE_ORDINAL; 
    } 
}; 

public class TestEnum { 
    public static void main (String... args){ 
     for (ids i : new ids[] { ids.OPEN, ids.CLOSE }) { 
      System.out.println(i.toString() + " " + 
       i.ordinal() + " " + 
       i.getCode()); 
     } 
    } 
} 
OPEN 0 100 
CLOSE 1 101