2011-11-03 12 views
43

से मिलान कैसे करें I एंड्रॉइड में मूल कोड से लंबे या int के रूप में वापसी मूल्य प्राप्त कर रहा हूं, जिसे मैं प्रसंस्करण उद्देश्य के लिए कनवर्ट करना या एनम के साथ मेल करना चाहता हूं। क्या यह संभव है ? कैसे?int से enum

उत्तर

57

आप मूल्यों और enums का पूरा नियंत्रण है, और वे अनुक्रमिक हैं, तो आप enum क्रमसूचक मूल्य का उपयोग कर सकते हैं:

enum Heyo 
{ 
    FirstVal, SecondVal 
} 

...later 

int systemVal = [whatever]; 
Heyo enumVal = Heyo.values()[systemVal]; 

int againSystemVal = enumVal.ordinal(); 
+5

एनम के लिए "मान" प्राप्त करने के लिए ordinal का उपयोग अनुशंसित नहीं है। इसके बजाए, इसके बजाय एक उदाहरण फ़ील्ड का उपयोग करें। जोश ब्लोच के प्रभावी जावा के दूसरे संस्करण में आइटम 31 देखें। –

50

आप अपना enum सेट अप कर सकते हैं ताकि इसमें लंबा या int बनाया जा सके।

जैसे:

ePasswordType var = ePasswordType.NUMBER; 

int ValueOfEnum = var.getValue(); 

enum प्राप्त करने के लिए जब आप केवल पूर्णांक पता है, उपयोग करें: इस फाइल ePasswordType.java

public enum ePasswordType { 

    TEXT(0), 
    NUMBER(1); 

    private int _value; 

    ePasswordType(int Value) { 
     this._value = Value; 
    } 

    public int getValue() { 
      return _value; 
    } 

    public static ePasswordType fromInt(int i) { 
     for (ePasswordType b : ePasswordType .values()) { 
      if (b.getValue() == i) { return b; } 
     } 
     return null; 
    } 
} 

फिर आप इस तरह सौंपा मूल्यों अभिगमन कर सकते हैं यह:

ePasswordType t = ePasswordType.fromInt(0); 

जावा में Enums वे हैं आरई शक्तिशाली क्योंकि प्रत्येक मूल्य अपनी कक्षा हो सकता है।

+3

यह क्रमसूचक का उपयोग कर की तुलना में काफी बेहतर तरीका है()। सीखने के लिए, प्रभावी जावा –

+0

@ कफ्स पढ़ें: क्या पूर्णांक मान का उपयोग कर ** ** ** enum सेट करने का एक उचित तरीका भी है? – Levit

+0

@Levit मान डिज़ाइन समय पर सेट समय पर सेट नहीं है। यदि आपका मतलब है कि जब आप केवल int को जानते हैं तो enum मान पुनर्प्राप्त करें, मेरा संपादित उत्तर देखें। – Kuffs