2011-11-16 14 views
177

मेरे पास एक ऐसा फ़ंक्शन है जो एक प्रकार int को वापस करता है। हालांकि, मेरे पास केवल टैक्स गणना का मूल्य है।enum value को int में कैसे परिवर्तित करें?

मैं कैसे किसी पूर्णांक पर टैक्स गणन मूल्य डाली कर सकते हैं?

public enum TAX { 
    NOTAX(0),SALESTAX(10),IMPORTEDTAX(5); 

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

TAX var = TAX.NOTAX; // This value will differ 

public int getTaxValue() 
{ 
    // what do do here? 
    // return (int)var; 
} 
+1

[कैसे enum करने के लिए पूर्णांक मैच के लिए] की संभावित डुप्लिकेट (http://stackoverflow.com/questions/7996335: निम्न उदाहरण दिखाता है कि स्ट्रिंग के लिए enum मूल्य बदलने और वापस करने के लिए (ValueType एक enum है)/कैसे करने वाली मैच पूर्णांक करने वाली enum) – malat

उत्तर

273

आपको enum को value किसी भी तरह का खुलासा करना होगा, उदा।

public enum Tax { 
    NONE(0), SALES(10), IMPORT(5); 

    private final int value; 
    private Tax(int value) { 
     this.value = value; 
    } 

    public int getValue() { 
     return value; 
    } 
} 

... 

public int getTaxValue() { 
    Tax tax = Tax.NONE; // Or whatever 
    return tax.getValue(); 
} 

(मैं नाम बदल दिया है थोड़ा अधिक पारंपरिक और पठनीय होने के लिए, btw।)

यह मानते हुए कि आपके निर्माता में निर्दिष्ट किए गए मान चाहते है। यदि वह नहीं है जो आप चाहते हैं, तो आपको हमें और जानकारी देना होगा।

+11

एक बेहतर विचार यहाँ http://stackoverflow.com/a/7996473/398348 – likejiujitsu

+0

@likejiujitsu है: यह विपरीत दिशा में जा रहा है। इस प्रश्न में, ओपी पहले से * 'कर' प्रकार का मूल्य है, और इससे संख्यात्मक मूल्य प्राप्त करना चाहता है। –

+0

मैं सिर्फ यह कोशिश की और यह विफल 'myEnumValue = MyEnum.valueOf (मींट) एहसास;' आर्ग प्रकार स्ट्रिंग की हो गया है - या वहाँ कुछ मुझे याद आ रही है? – likejiujitsu

16

आप मूल्य तुम निर्माता में बताए जाते हैं चाहते हैं, आप enum परिभाषा एक विधि को जोड़ने के लिए है कि मूल्य लौटना ही होगा।

आप एक अद्वितीय संख्या है कि enum मूल्य का प्रतिनिधित्व चाहते हैं, आप ordinal() उपयोग कर सकते हैं।

public enum Color { 

    White, 

    Green, 

    Blue, 

    Purple, 

    Orange, 

    Red 
} 

तो:

+2

सावधान रहें। ऐसे कई विकासवादी एंटी-पैटर्न हैं जो 'ordinal()' के लिए वैध उपयोग मामलों की तुलना में 'ordinal()' पर भरोसा करते हैं। यदि आपको 'enum' के लिए एक अद्वितीय मान स्टोर करने की आवश्यकता है, तो बस' enum' स्टोर करें। EnumSets, Enums की सूची, EnumMaps, और लगभग किसी भी अन्य Enum संग्रह जो आप उपलब्ध हो सकता है। –

+1

@EdwinBuck: यह इंगित करने के लिए अच्छा है, मैं सिर्फ 'ordinal()' के अस्तित्व का उल्लेख करना चाहता था क्योंकि ओपी ने यह स्पष्ट नहीं किया कि वह वास्तव में क्या चाहता था। – unholysampler

+0

सामान्य नहीं मिलता है। कृपया इसके बारे में enum api जांचें। उप-वोट हटा दिया गया। –

161

मैं इस पसंद करते हैं

//cast enum to int 
int color = Color.Blue.ordinal(); 
+27

जोशुआ ब्लोच ने अपनी पुस्तक इफेक्टिव जावा (द्वितीय संस्करण) में यह गलत/अनुशंसित नहीं है। आइटम 31 देखें। – user504342

+1

ऑर्डिनल() विधि का उपयोग सीधे पुनः संयोजित नहीं किया जाता है। – tonga

+25

@ user504342 मेरे पास पुस्तक का दूसरा संस्करण नहीं है, तो क्या आप कृपया हमें यह बता सकते हैं कि इसकी अनुशंसा क्यों नहीं की जाती है? – likejiujitsu

6

कुछ समय कुछ सी # दृष्टिकोण जीवन जावा दुनिया में आसान बना देता है ..:

class XLINK { 
static final short PAYLOAD = 102, ACK = 103, PAYLOAD_AND_ACK = 104; 
} 
//Now is trivial to use it like a C# enum: 
int rcv = XLINK.ACK; 
+0

मेरे लिए यह जाने का सबसे वांछनीय तरीका है। मुझे enum (कोड स्पष्टता) का लाभ मिलता है, एक डेटा प्रकार जो डीबी अनुकूल है, और मुझे "एंड्रॉइड रास्ता" करने के लिए 100 enum विकल्पों का शोध करने की आवश्यकता नहीं है। सरल और प्रभावी। –

1

शायद यह उपयोग करने के लिए बेहतर है एक पूर्णांक की तुलना में एक स्ट्रिंग प्रस्तुति, क्योंकि स्ट्रिंग अभी भी वैध है अगर मूल्य enum में जोड़े जाते हैं। आप एनम वैल्यू() विधि को एनरम वैल्यू को एक स्ट्रिंग में कनवर्ट करने के लिए enum's valueOf() विधि को स्ट्रिंग से फिर से enum प्रतिनिधित्व बनाने के लिए उपयोग कर सकते हैं।

ValueType expected = ValueType.FLOAT; 
String value = expected.name(); 

System.out.println("Name value: " + value); 

ValueType actual = ValueType.valueOf(value); 

if(expected.equals(actual)) System.out.println("Values are equal"); 
संबंधित मुद्दे