में वेरिएबल्स क्यों इंटरफ़ेस में उपयोग किया जाने वाला एक चर सार्वजनिक स्थिति अंतिम है? विशेष रूप से "स्थैतिक" क्यों?इंटरफ़ेस
इंटरफ़ेस
उत्तर
एक इंटरफ़ेस में घोषित एक फ़ील्ड केवल वैसे भी स्थिर हो सकता है, तो यह इस बात पर निर्भर करेगा कि आप किस उदाहरण का उपयोग करने के लिए उपयोग करते हैं?
इंटरफ़ेस में फ़ील्ड डालना अक्सर इन दिनों खराब शैली है। इंटरफेस का मतलब है कि इसे लागू करने वाले वर्गों की क्षमताओं को प्रतिबिंबित करने के लिए - जो निरंतर विचार के लिए पूरी तरह से ऑर्थोगोनल है। स्थिरता का एक गुच्छा घोषित करने के लिए इंटरफ़ेस केवल का उपयोग करना निश्चित रूप से एक बुरा विचार है। मुझे कभी-कभी इंटरफ़ेस प्रकार को स्थिर कार्यान्वयन करने के लिए उपयोगी लगता है जो कि सरल कार्यान्वयन हैं - इसलिए फ़िल्टरिंग इंटरफ़ेस में "ALLOW_ALL" और "ALLOW_NONE" फ़ील्ड हो सकते हैं, उदाहरण के लिए।
मुझे लगता है आप गर्भ धारण कर सकता है एक परिदृश्य के जहां एक अंतरफलक को लागू किया वास्तव में अपने वर्ग के लिए एक उदाहरण फ़ील्ड जोड़ - लेकिन यह है कि न केवल परोक्ष सार्वजनिक किया जा रहा है यह करने के मामले में कैप्सूलीकरण टूट जाएगा, लेकिन यह भी भाग को निर्दिष्ट करके एपीआई के बजाय कार्यान्वयन के।
स्टेटिक निरंतर पैरामीटर पूरी तरह से खराब हैं, वैसे भी, एनम्स के साथ स्थिरांक का समूह बदलना उचित जावा तरीका है, क्योंकि यह बेहद टाइपएफ़ है, स्विच के साथ काम करता है और इसे लगातार एक से अधिक (सहायक) मानों को शामिल करने के लिए कोड किया जा सकता है जो अनिवार्य रूप से दोहराए जाने से बचाता है जादू संख्याएं – Esko
@ जोन स्कीट ग्रेट .. लेकिन मैं इसे व्यावहारिक रूप से कार्यान्वित नहीं कर रहा था! – Sandeep
@Esko: कुछ * मामलों में Enums उपयुक्त हैं, लेकिन वे निश्चित रूप से * हर * मामले को कवर नहीं करते हैं जहां आप स्थिरांक चाहते हैं। विशेष रूप से, enums केवल उपयुक्त हैं जहां मूल्यों का एक निश्चित सेट है। उदाहरण के लिए, यूटीएफ -8 और अन्य गारंटीकृत वर्णसेट के लिए चार्सेट "स्थिरांक" होना अच्छा लगेगा - लेकिन आप इसे एक enum बनाना नहीं चाहते हैं। सबकुछ एक नाखून की तरह दिखने की कोशिश न करें क्योंकि आपको enum hammer मिल गया है :) –
क्योंकि आप एक इंटरफ़ेस को तुरंत चालू नहीं कर सकते हैं। गैर-स्थैतिक गैर-अंतिम चर का उपयोग करने के लिए कोई विधि निकाय भी नहीं हो सकता है।
यह स्थिर क्यों नहीं होगा?
यह किसी भी विशेष उदाहरण के बजाय इंटरफ़ेस से लगातार स्थिर है।
अमूर्त कक्षा उदाहरण हो सकता है? – UnKnown
मुझे लगता है कि मुख्य कारण वीएम/भाषा का कार्यान्वयन विवरण है।
यदि किसी इंटरफ़ेस को गैर स्थैतिक चर रखने की अनुमति नहीं है, तो कक्षा के निर्माण के दौरान इंटरफ़ेस के लिए स्मृति आवंटित करने की आवश्यकता नहीं है। यदि आप एक ही नाम के साथ चर का वारिस करते हैं तो विशेष नामकरण/नामकरण तंत्र की भी आवश्यकता नहीं है। इंटरफ़ेस का उपयोग होने पर आपको केवल एक ही चीज है जो सही कार्यों को कॉल करने के लिए कुछ टेबल है।
संक्षेप में - यह भाषा/वीएम रखरखाव का लाइव आसान बनाता है। यदि आप वास्तव में एकाधिक विरासत और इसके नुकसान और जाल पर एक नज़र डालना चाहते हैं, तो बर्ट्रेंड मेयर (द्वितीय संस्करण) द्वारा ऑब्जेक्ट ओरिएंटेड सॉफ्टवेयर निर्माण पढ़ें। फिर आप समझते हैं कि इंटरफ़ेस को इतना आसान क्यों होना चाहिए (और फिर भी अधिकांश चीजें एकाधिक विरासत करता है)।
एक इंटरफेस एक अनुबंध कि वस्तुओं के बीच बातचीत परिभाषित करता है।
यह बातचीत एक्सपोज़ेड विधियों द्वारा परिभाषित की गई है, न कि चर द्वारा। वेरिएबल केवल आंतरिक कामकाज का वर्णन करेंगे, न कि बातचीत।
ध्यान दें कि बातचीत के लिए चर का कभी भी उपयोग नहीं किया जाना चाहिए। encapsulation के ओओपी सिद्धांत के मुताबिक, 1 वर्ग को किसी अन्य वर्ग के चर का उपयोग करने के लिए एक अपराध होगा।
स्थिरांक (उदा। Math.PI
) एकमात्र स्वीकार्य अपवाद हैं। चूंकि स्थिरांक एकमात्र प्रकार के चर हैं जिन्हें अन्य कक्षाओं द्वारा सीधे encapsulation के सिद्धांत का उल्लंघन किए बिना पहुंचा जा सकता है, इंटरफ़ेस में सभी चर public static final
चर के रूप में माना जाता है (यानी।स्थिरांक)
मैंने कुछ समय पहले एक पुस्तक में पढ़ा था कि इस तरह के myInterface myVarible = new myterter(); जैसे इंटरफेस का एक चर बनाने के लिए बेहतर है। कक्षा का उपयोग करने के बजाय सड़क को बनाए रखना आसान है। यह मामला कैसे होगा। –
संभावित डुप्लिकेट [डिफ़ॉल्ट रूप से इंटरफ़ेस चर स्थिर और अंतिम क्यों हैं?] (Http://stackoverflow.com/questions/2430756/why-are-interface-variables-static-and-final-by-default) – Line