2010-10-08 25 views
37

दिए गए एनम नाम प्राप्त करने वाला जावा मुझे जावा एनम प्रकार का नाम कैसे दिया जा सकता है?जावा एनम वैल्यू

मैंने कोड लिखा है जो एक विशेष एनम प्रकार के लिए काम करता है, क्या मैं इसे और अधिक सामान्य बना सकता हूं?

enum के प्रकार:

public enum Category { 

    APPLE("3"), 
    ORANGE("1"), 
    GRAPE("GRAPE"), 
    BANANA("Banana"); 

    private final String identifier; 

    /** 
    * Constructor. 
    * 
    * @param identifier 
    *   - identfier. 
    */ 
    private Category(String identifier) { 
     this.identifier = identifier; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public String toString() { 
     return identifier; 
    } 

    public static String getEnumNameForValue(Object value){ 
     Category[] values = Category.values(); 
     String enumValue = null; 
     for(Category eachValue : values) { 
      enumValue =eachValue.toString(); 

      if (enumValue.equals(value)) { 
       return eachValue.name(); 
      } 
     } 
    return enumValue; 
    } 
} 
+1

क्या कोई विशेष कारण है कि आप उन्हें देखने के लिए एनम के नाम() के अलावा कुछ और उपयोग करना चाहते हैं? इससे बहुत से लोगों को भ्रमित कर दिया जाएगा, और आप एक सरल 'category.valueOf (नाम)' का भी उपयोग नहीं कर सकते हैं। – Thilo

उत्तर

30

आप बदलना चाहिए अपने getEnumNameForValuename() विधि के लिए एक कॉल से।

+1

@ जुकिआ: इसके अलावा, 'toString() 'ओवरराइड करने पर विचार करें: http://download.oracle.com/javase/6/docs/api/java/lang/Enum.html#toString%28%29 – trashgod

+4

@trashgod: वह टूस्ट्रिंग – Thilo

+0

@ थिलो ओवरराइड कर रहा है: मेरी त्रुटि; धन्यवाद। @ जुलिआ: अपना नाम गलत वर्तनी के बारे में खेद है। – trashgod

20

कोड के नीचे की कोशिश

public enum SalaryHeadMasterEnum { 

    BASIC_PAY("basic pay"), 
    MEDICAL_ALLOWANCE("Medical Allowance"); 

    private String name; 

    private SalaryHeadMasterEnum(String stringVal) { 
     name=stringVal; 
    } 
    public String toString(){ 
     return name; 
    } 

    public static String getEnumByString(String code){ 
     for(SalaryHeadMasterEnum e : SalaryHeadMasterEnum.values()){ 
      if(code == e.name) return e.name(); 
     } 
     return null; 
    } 
} 

अब आप नीचे दिए गए कोड का उपयोग कर सकते Enum द्वारा मूल्य

SalaryHeadMasterEnum.getEnumByString("Basic Pay") 

कोड नीचे उपयोग पुनः प्राप्त करने के लिए नीचे दिए गए

SalaryHeadMasterEnum.BASIC_PAY.name() 

उपयोग स्ट्रिंग के रूप में प्राप्त करने के लिए Enum स्ट्रिंग प्राप्त करने के लिए कोड enum

SalaryHeadMasterEnum.BASIC_PAY.toString() 
+2

'code == e.name' जिस तरीके से आप इसका मतलब था, उस पर काम नहीं करेगा, 'e.name.equals (कोड)' होना चाहिए –

+0

@f_puras क्या आपने उपरोक्त कोड का परीक्षण किया है ?? –

+4

खैर, हाँ: 'वेतन हैडमास्टरएनम.जेटम्नमब्रिस्ट्रिंग ("मूल वेतन") काम करता है, लेकिन जेवीएम विलय स्ट्रिंग अक्षर पर निर्भर करता है। 'वेतन HeadMasterEnum.getEnumByString (नया स्ट्रिंगबिल्डर ("मूल") .append ("pay")। ToString())' नहीं है, लेकिन IMHO होना चाहिए। 'String.equals()' का उपयोग दोनों काम करेगा ;-) –

3

प्रयास करें, निम्न कोड ..

@Override 
    public String toString() { 
    return this.name(); 
    } 
+0

से भिन्न अर्थ के साथ एक चर 'नाम' का उपयोग करने के लिए यह काम करना चाहिए ठीक है, लेकिन 'getName() '(या कुछ समान) के बजाय फ़ंक्शन' toString()' क्यों कॉल करें? – Tuzane

1

यहाँ, नीचे दिए गए कोड है यह Enum मूल्य से Enum नाम वापस आ जाएगी।

public enum Test { 

    PLUS("Plus One"), MINUS("MinusTwo"), TIMES("MultiplyByFour"), DIVIDE(
      "DivideByZero"); 
    private String operationName; 

    private Test(final String operationName) { 
     setOperationName(operationName); 
    } 

    public String getOperationName() { 
     return operationName; 
    } 

    public void setOperationName(final String operationName) { 
     this.operationName = operationName; 
    } 

    public static Test getOperationName(final String operationName) { 

     for (Test oprname : Test.values()) { 
      if (operationName.equals(oprname.toString())) { 
       return oprname; 
      } 
     } 
     return null; 
    } 

    @Override 
    public String toString() { 
     return operationName; 
    } 
} 

public class Main { 
    public static void main(String[] args) { 

     Test test = Test.getOperationName("Plus One"); 
     switch (test) { 
     case PLUS: 
      System.out.println("Plus....."); 
      break; 
     case MINUS: 
      System.out.println("Minus....."); 
      break; 

     default: 
      System.out.println("Nothing.."); 
      break; 
     } 
    } 
} 
संबंधित मुद्दे