इंटरफेस और enums के बीच, जो स्थिरांक घोषित करने के लिए बेहतर है? ऐसा क्यों है?इंटरफेस बनाम enums
उत्तर
इंटरफेस के उद्देश्य के रूप में स्थिरांक घोषित करने के लिए एनम्स का उपयोग करना हमेशा बेहतर होता है क्योंकि पूरी तरह से अलग स्तर पर होते हैं। हां, ऐसे कई इंटरफेस हैं जिनमें public static final
स्थिरांक हैं, लेकिन मुझे लगता है कि अनन्य नौकरी आपको इन स्थिरांक प्रदान करना है।
इंटरफेस सामान्य व्यवहार को परिभाषित करने के लिए सामान्य व्यवहार, enums परिभाषित करने के लिए डिज़ाइन किए गए हैं।
एनम एक वास्तविक मूल्य का प्रतिनिधित्व करता है जिसे किसी अन्य मूल्य से तुलना की जा सकती है, या डेटाबेस में आसानी से संग्रहीत किया जा सकता है। आपके पास फ्लैग-एनम भी हो सकता है (सी # में, जावा में नहीं पता) जो आपको enum के मानों (और, OR, XOR, आदि) पर बाइनरी ऑपरेशंस करने देता है।
जावा एनम्स में मूल रूप से (निरंतर) कक्षाएं होती हैं, इसलिए आप .NET 4.0 से पहले C# में enums के साथ उनके साथ बहुत कुछ कर सकते हैं। मुझे लगता है कि सी #/.NET 4.0 इस सुविधा को लागू करने जा रहा है। – Tedil
@ टेडिल: सी # 4.0 फीचर सेट को अंतिम रूप दिया गया है। इसमें उन्नत ओओ एनम्स शामिल नहीं हैं। – missingfaktor
यदि आपके स्थिरांक के पास एक विशिष्ट प्रकार होने का कोई कारण है, यदि उन्हें किसी प्रकार का व्यवहार (यानी, विधियों) की आवश्यकता है, या यदि वे अन्य मूल्यों के संमिश्र हैं, 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
जावा में जोड़ा गया था।
यदि आप जावा 5 या नए के साथ काम करते हैं तो Enum जाने का रास्ता है। एकमात्र अपवाद यह है कि यदि आपकी कॉन्स की सूची खुली है और इसे बढ़ाया जा सकता है। Enums बढ़ाया नहीं जा सकता है। एक और अपवाद यह है कि यदि यह MAX_INTEGER जैसे एकल मान हैं।
- 1. इंटरफेस बनाम कक्षा में
- 2. सार बनाम इंटरफेस - डेल्फी
- 3. निहित बनाम स्पष्ट इंटरफेस
- 4. बनाम स्पष्ट इंटरफेस कार्यान्वयन
- 5. जेनिक्स बनाम इंटरफेस
- 6. क्या इंटरफेस सी # enums डिफ़ॉल्ट रूप से लागू करते हैं
- 7. enums
- 8. सी # और इंटरफेस - बनाम अंतर्निहित
- 9. 100% सार वर्ग बनाम इंटरफेस
- 10. java.util पैकेज - कक्षा बनाम इंटरफेस
- 11. PHP इंटरफेस IteratorAggregate बनाम इटरेटर?
- 12. कक्षा स्तर एनोटेशन बनाम इंटरफेस
- 13. डब्ल्यूसीएफ डाटाकंट्रैक्ट बनाम डेटाकंट्रैक्ट इंटरफेस
- 14. जावा enums mutability उपयोगकेस और संभावनाओं enums?
- 15. विरोधाभासी enums
- 16. सी # Enums
- 17. उपलब्ध Enums
- 18. इंटरफेस, एकाधिक विरासत बनाम इंटरफेस का उपयोग क्यों करें, इंटरफेस के लाभ?
- 19. ऑब्जेक्ट ओरिएंटेड बेस्ट प्रैक्टिस - विरासत बनाम बनाम इंटरफेस
- 20. इंटरफेस बनाम टेम्पलेट्स सी में निर्भरता इंजेक्शन ++
- 21. C++/CLI इंटरफ़ेस वर्ग बनाम इंटरफेस struct
- 22. जावा कोड शैली - इंटरफेस बनाम सार कक्षाएं
- 23. जेनेरिक प्रकार बनाम सार कक्षा/इंटरफेस
- 24. इंटरफेस बनाम सार वर्ग (विशिष्ट मामले में)
- 25. प्रोगार्ड क्लास सदस्य के enums
- 26. जावा: आंतरिक enums युक्त इंटरफेस; कार्यान्वयन की कक्षाओं में विस्तार कार्यक्षमता
- 27. Enums और substraction ऑपरेटर
- 28. 64 बिट Enums? सी #
- 29. Enums का उपयोग GSON
- 30. सी में टाइपएफ़ enums?
'सार्वजनिक स्थिर अंतिम' स्थिरांक 'enum' से पहले एक समय से हैं। :) – Bombe
@ बॉम्बे, यह पूरी तरह से सच नहीं है। यदि, कहें, 'java.lang.Math' को आज फिर से लिखा जाना था,' पीआई 'और' ई 'को अभी भी' सार्वजनिक स्थैतिक अंतिम डबल 'स्थिरांक घोषित किया जाएगा। – gustafc
हां, ज़ाहिर है, क्योंकि आखिरी बार मैंने चेक किया 'मठ' एक इंटरफ़ेस नहीं था। – Bombe