2014-09-24 7 views
15

मैं उदाहरण के लिए, स्थिति है जहाँ मैं एक वर्ग है कि सरल enum प्रकार के रूप में प्रतिनिधित्व किया जा सकता है के लिए एक चर की जरूरत है अक्सर है:जावा एनम ओवरकिल?

private enum PageOrder {DOWN_THEN_OVER, OVER_THEN_DOWN}; 

एक घोषणा वर्ग है कि तब मैं चर धारण भीतर enum प्रकार हैं योग्य नाम MyClass.PageOrder का उपयोग करने के लिए जो आरामदायक नहीं है। लेकिन अगर मैं एक नई कक्षा बनाता हूं तो मेरे पास सिर्फ एक साधारण enum घोषणा के लिए एक कक्षा है, जो मेरे लिए अधिक लगता है।

इसी कारण से, मैं अक्सर enum प्रकार के बजाय पूर्णांक का उपयोग करता हूं।

इस विषय पर कोई टिप्पणी/सुझाव?

+26

टाइपिंग को बचाने के लिए किसी गलत व्यक्ति के सही समाधान को "ठीक" न करें। – biziclop

+1

"* लेकिन अगर मैं एक नई कक्षा बनाता हूं तो मेरे पास सिर्फ एक साधारण enum घोषणा के लिए एक वर्ग है, जो मेरे लिए अधिक लगता है *" - ओवरकिल कहां है? एक निजी enum एक वर्ग भी है (अपनी खुद की .class फ़ाइल के साथ) - यह केवल एक अलग दृश्यता है। –

+5

अपनी फ़ाइल में एक enum overkill की तरह लग सकता है, लेकिन यह नहीं है। यह पूरी तरह से उपयुक्त है और यह अच्छी डिजाइन है। Enum क्लास और इसके प्रत्येक स्थिरांक में कुछ उपयोगी जावाडोक जोड़ें, और आप पाएंगे कि स्रोत फ़ाइल लगभग उतनी ही स्पष्ट नहीं होगी। आंतरिक कक्षाओं के लिए वैध उपयोग हैं, लेकिन केवल एक आंतरिक वर्ग बनाना क्योंकि इसकी अपनी फ़ाइल "भारी हेवीवेट" एक अच्छा कारण नहीं है। – VGR

उत्तर

34

तुम हमेशा inner enums are always static के बाद से काम करेंगे

import static yourpkg.MyClass.PageOrder; 

यह कर सकते हैं। ध्यान दें कि यह फ़ाइल में भी काम करता है जो MyClass कक्षा को परिभाषित करता है।

+4

और आप स्थिर आयात को स्वचालित रूप से सम्मिलित करने के लिए ग्रहण को कॉन्फ़िगर कर सकते हैं। – biziclop

+2

यूप। जैसा कि समझाया गया है [http] // http: // stackoverflow।com/प्रश्न/288,861/ग्रहण-अनुकूलन-आयात-शामिल स्थैतिक-आयात के लिए)। – aioobe

+1

Enums अस्पष्टता या सिर्फ सादे गुप्त कोड से बचें। 'रेंडर पेज (1) '' रेंडरपेज (OVER_THEN_DOWN)' के रूप में जानकारीपूर्ण नहीं है। – sfdcfox

21

इसी कारण से, मैं अक्सर enum प्रकार के बजाय पूर्णांक का उपयोग करता हूं।

कृपया ऐसा न करें।

आप अक्सर माता-पिता वर्ग और enum के लिए नाम चुन सकते हैं जो वास्तव में कोड की स्पष्टता में सहायता करता है।

class Page { 
    enum Order { 
     DOWN_THEN_OVER, OVER_THEN_DOWN; 
    } 
} 

// Accessing: A little verbose but clear and efficient. 
Page.Order order = Page.Order.DOWN_THEN_OVER; 

आप कर सकते हैं भी static import प्रत्येक enum आप का उपयोग, लेकिन मैं इसके बाद के संस्करण शब्दाडंबर पसंद करते हैं।

import static com.oldcurmudgeon.test.Test.Order.DOWN_THEN_OVER; 
import static com.oldcurmudgeon.test.Test.Order.OVER_THEN_DOWN; 

public class Test { 

    enum Order { 

     DOWN_THEN_OVER, OVER_THEN_DOWN; 
    } 

    public void test() { 
     Order pageOrder = DOWN_THEN_OVER; 
    } 

} 

जाहिर है आप इस दृष्टिकोण नहीं ले जा सकते, तो enumprivate है।

+1

enum का विकल्प 'सार्वजनिक स्थिर अंतिम int DOWN_THEN_OVER = 0 का उपयोग करना है; सार्वजनिक स्थिर अंतिम int OVER_THEN_DOWN = 1; 'और ऐसा लगता है कि दोनों मूल्यों के छोटे सेट के लिए समान रूप से पठनीय और रखरखाव योग्य हैं। –

+0

int DOWN_THEN_OVER = 1; int OVER_THEN_DOWN = 1; int wackyDuck = 1;/* Int के रूप में संग्रहीत DOWN_THAN_OVER OVER_THAN_DOWN या बस एक बेकार बतख */ –

+2

@ जॉन हेनकेल - 'सार्वजनिक स्थैतिक अंतिम int DOWN_THEN_OVER = 0; सार्वजनिक स्थैतिक अंतिम int OVER_THEN_DOWN = 1; ... सार्वजनिक स्थिर अंतिम int UP_THEN_AT_THEM = 92367; '-' turnPage (UP_THEN_AT_THEM) '- क्या आप अब खतरे को देखते हैं? एक 'enum' के साथ आप बस ऐसा नहीं कर सकते - यहां तक ​​कि गलती से भी। – OldCurmudgeon

-2

यदि आप संख्याओं को कोडर के अनुकूल नाम देने के लिए enums का उपयोग कर रहे हैं, और आपको उन्हें स्क्रीन पर कभी लिखना नहीं है, या उन्हें फ़ाइल से पढ़ना नहीं है, तो यह पूरी तरह से एक ओवरकिल है। इस तथ्य की दुर्भाग्यपूर्ण आर्टिफैक्ट कि जावा में सबकुछ एक वर्ग होना है। यदि आप इस तरह के enums का उपयोग कर रहे हैं, तो मैं इसके बजाय स्थिरांक का उपयोग करने की सलाह देते हैं।

यदि आप उपयोगकर्ता के अनुकूल प्रारूप में enum के मान को मुद्रित करना चाहते हैं, या किसी मूल्य को एक enum में रूपांतरित करना चाहते हैं, तो संभवतः आपको कक्षा की आवश्यकता है।

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