enum

2013-01-10 15 views
12

में स्थिर अंतिम विधियां इसलिए मैंने Google और SO के आसपास देखा है, मुझे उदाहरण या स्पष्टीकरण नहीं मिल रहा है: staticfinalenum में विधियों का उद्देश्य क्या है?enum

मैं क्या समझ:

  1. तरीके घोषित static समारोह/प्रक्रियात्मक भाषाओं की तरह पहुँचा जा सकता है।
  2. final मतलब है कि आप नहीं ओवरराइड यह कर सकते हैं। संदर्भ बदल नहीं सकते हैं। जैसा कि टिप्पणियों में उल्लिखित assylias static या तो ओवरराइड नहीं किया जा सकता है।
  3. enum एस को उप-वर्गीकृत नहीं किया जा सकता है, here समझाया गया। अगर यह किया जा कभी नहीं अधिरोहित होगा के बाद से वहाँ एक उपवर्ग नहीं होगा

तो क्या enum रों में staticfinal तरीकों की बात है?

+4

एक स्थिर विधि किसी भी मामले में ओवरराइड नहीं किया जा सकता ... – assylias

+0

@Henry स्टेटिक तरीकों या तो ओवरराइड नहीं किया जा सकता है। – biziclop

+0

@ assylias मुझे इसे दो बिंदुओं में जोड़ना चाहिए। – wtsang02

उत्तर

17

एक स्थिर विधि अंतिम बनाने से, you prevent it from being hidden एक उपवर्ग द्वारा (केवल उदाहरण तरीकों ओवरराइड किया जा सकता)।

चूंकि enum को उप-वर्गीकृत नहीं किया जा सकता है, इसलिए स्थिर विधि अंतिम बनाना अनिवार्य है लेकिन वर्जित नहीं है।

नोट: तकनीकी रूप से, प्रत्येक enum स्थिर जिसमें कक्षा निकाय implicitly defines an anonymous class that extends the enum है। लेकिन inner classes may not declare static methods के बाद से, स्थिर अंतिम विधि इस तरह के निरंतर वर्ग निकाय में छिपा नहीं जा सका।

+1

+1 असल में वहाँ मामलों में जहां Enum subclassed जा सकता है, उदाहरण के लिए 'enum someEnum {VALUE1 {}, VALUE2 {};} 'VALUE1 {} में' SomeEnum' प्रकार का अनाम वर्ग है। लेकिन चूंकि हम गैर स्थैतिक आंतरिक वर्गों (जैसे अज्ञात वर्गों) के लिए स्थिर विधियां नहीं जोड़ सकते हैं, यहां 'स्थिर' के साथ अंतिम 'ओवरकिल है। – Pshemo

+0

@Pshemo यह एक अच्छा मुद्दा है - मैंने अपना जवाब संपादित किया है और संदर्भ जोड़े हैं। – assylias

4

यह देखना आसान है कि क्यों static विधियां समझ में आती हैं, इसलिए मुझे लगता है कि प्रश्न final संशोधक के बारे में है।

final, यहाँ कोई उद्देश्य में कार्य करता सिवाय शायद कोड थोड़ा पढ़ने में आसान बनाने के लिए, लेकिन बहुत ज्यादा नहीं है।

यह interface विधियों के समान होता है जिस तरह से अक्सर public void foo(); के रूप में लिखा जाता है, भले ही इंटरफ़ेस सदस्य हमेशा सार्वजनिक होते हैं।

0

आप एक enum आप उपवर्गों रूप enum के तरीकों, अनिवार्य रूप से enum उदाहरणों के रूप में लागू किया जाता है (या के बारे में सोचा) ओवरराइड कर सकते हैं के उदाहरण की घोषणा है। static किसी भी मामले में विधियों को ओवरराइड नहीं किया जा सकता है लेकिन ओपी और अन्य उत्तरों में निहितार्थ finalenum के लिए अनिवार्य है।

+1

आप स्थिरांक enumants के लिए एक स्थिर विधि नहीं जोड़ सकते हैं। – assylias

2

जावा एनम प्रकारों में स्थिरांक के निश्चित सेट का प्रतिनिधित्व करने के लिए उपयोग किया जाता है और इसे स्थिर अंतिम बनाने में केवल एक बार प्रारंभिक सहायता मिलती है, एक ही प्रतिलिपि सभी उदाहरणों में साझा की जाती है, कक्षा के नाम के साथ चर का उपयोग होता है और इसके साथ अंतिम केवल पढ़ने के लिए

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