2010-03-27 19 views

उत्तर

12

इंटरफेस के उद्देश्य के रूप में स्थिरांक घोषित करने के लिए एनम्स का उपयोग करना हमेशा बेहतर होता है क्योंकि पूरी तरह से अलग स्तर पर होते हैं। हां, ऐसे कई इंटरफेस हैं जिनमें public static final स्थिरांक हैं, लेकिन मुझे लगता है कि अनन्य नौकरी आपको इन स्थिरांक प्रदान करना है।

+6

'सार्वजनिक स्थिर अंतिम' स्थिरांक 'enum' से पहले एक समय से हैं। :) – Bombe

+5

@ बॉम्बे, यह पूरी तरह से सच नहीं है। यदि, कहें, 'java.lang.Math' को आज फिर से लिखा जाना था,' पीआई 'और' ई 'को अभी भी' सार्वजनिक स्थैतिक अंतिम डबल 'स्थिरांक घोषित किया जाएगा। – gustafc

+6

हां, ज़ाहिर है, क्योंकि आखिरी बार मैंने चेक किया 'मठ' एक इंटरफ़ेस नहीं था। – Bombe

2

इंटरफेस सामान्य व्यवहार को परिभाषित करने के लिए सामान्य व्यवहार, enums परिभाषित करने के लिए डिज़ाइन किए गए हैं।

एनम एक वास्तविक मूल्य का प्रतिनिधित्व करता है जिसे किसी अन्य मूल्य से तुलना की जा सकती है, या डेटाबेस में आसानी से संग्रहीत किया जा सकता है। आपके पास फ्लैग-एनम भी हो सकता है (सी # में, जावा में नहीं पता) जो आपको enum के मानों (और, OR, XOR, आदि) पर बाइनरी ऑपरेशंस करने देता है।

+1

जावा एनम्स में मूल रूप से (निरंतर) कक्षाएं होती हैं, इसलिए आप .NET 4.0 से पहले C# में enums के साथ उनके साथ बहुत कुछ कर सकते हैं। मुझे लगता है कि सी #/.NET 4.0 इस सुविधा को लागू करने जा रहा है। – Tedil

+0

@ टेडिल: सी # 4.0 फीचर सेट को अंतिम रूप दिया गया है। इसमें उन्नत ओओ एनम्स शामिल नहीं हैं। – missingfaktor

5

यदि आपके स्थिरांक के पास एक विशिष्ट प्रकार होने का कोई कारण है, यदि उन्हें किसी प्रकार का व्यवहार (यानी, विधियों) की आवश्यकता है, या यदि वे अन्य मूल्यों के संमिश्र हैं, enum एस जाने का तरीका हैं।

उदाहरण के लिए, यदि आप एक कार्ड खेल लागू कर रहे हैं मान लें और आप मूल्यों और सूट का प्रतिनिधित्व करना चाहते हैं:

enum Rank { 
    ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, 
    EIGHT, NINE, TEN, JACK, QUEEN, KING; 
} 
enum Suit { SPADES, CLUBS, DIAMONDS, HEARTS } 

वहाँ, यह अब फर्जी सूट या रैंक के साथ कार्ड बनाने के लिए असंभव है।

कभी-कभी, हालांकि, आप कहीं भी घोषित अक्सर उपयोग किए जाने वाले मूल्यों का एक गुच्छा रखने में रुचि रखते हैं। उस स्थिति में, उन्हें enum में डालना केवल अनावश्यक प्रयास होगा, क्योंकि ये स्थिरांक केवल एक उपकरण हैं जो हमें सभी दशमलवों को याद रखने से बचाने के लिए कहते हैं, π जब हम किसी सर्कल की परिधि की गणना कर रहे हैं, या कुछ। कौन सा बेहतर दिखता है?

// Using enum: 
enum MathConstant { 
    PI(3.14159265358979323846), E(2.7182818284590452354); 
    private final double value; 
    MathConstant(double v) { value = v; } 
    public double value() { return value; } 
} 
// Usage: 
double circumference = MathConstant.PI.value() * diameter; 

// Using a constant class: 
final class MathConstants { 
    private MathConstants() { throw new UnsupportedOperationException(); } 
    public static final double PI = 3.14159265358979323846, 
           E = 2.7182818284590452354; 
} 
// Usage: 
double circumference = MathConstants.PI * diameter; 

इंटरफेस के लिए: कभी भी इंटरफ़ेस में स्थिरांक न रखें। "निरंतर इंटरफ़ेस" पैटर्न खराब है (justification), और इसका उपयोग करने का एकमात्र तर्क अमान्य प्रस्तुत किया गया है क्योंकि import static जावा में जोड़ा गया था।

0

यदि आप जावा 5 या नए के साथ काम करते हैं तो Enum जाने का रास्ता है। एकमात्र अपवाद यह है कि यदि आपकी कॉन्स की सूची खुली है और इसे बढ़ाया जा सकता है। Enums बढ़ाया नहीं जा सकता है। एक और अपवाद यह है कि यदि यह MAX_INTEGER जैसे एकल मान हैं।

संबंधित मुद्दे