2008-10-28 10 views
21

उदाहरण के लिए:विधि स्कोप्ड स्थिरांक पर आपके विचार क्या हैं?

public void doSomething() { 

    final double MIN_INTEREST = 0.0; 

    // ... 
} 

व्यक्तिगत रूप से, मैं नहीं बल्कि इन प्रतिस्थापन स्थिरांक श्रेणी स्तर पर स्थिर घोषित देखना होगा। मुझे लगता है कि मैं इस मामले पर "उद्योग दृष्टिकोण" ढूंढ रहा हूं।

+0

क्या क्लास स्तर पर विपरीत स्तर घोषित करने के लिए स्मृति उपयोग लाभ है, यदि वर्ग सिंगलटन है? कोई विचार: @ क्रिस क्रूडमोर – Adam

उत्तर

16

मेरी प्रारंभिक स्थिति यह है कि प्रत्येक परिवर्तनीय या स्थिर को यथासंभव/व्यावहारिक (यानी आधे में कोड के लॉजिकल ब्लॉक को तोड़ना न करें, केवल कुछ लाइनों को घोषित करने के लिए) के रूप में घोषित/आरंभ किया जाना चाहिए। , और यथासंभव कसकर scoped। - जब तक कि आप मुझे एक अच्छा कारण नहीं दे सकते कि यह अलग क्यों होना चाहिए।

उदाहरण के लिए, एक विधि स्कॉप्ड फाइनल सार्वजनिक एपीआई में दिखाई नहीं देगी। कभी-कभी जानकारी के इस बिट को आपकी कक्षा के उपयोगकर्ताओं के लिए उपयोगी छोड़ दिया जा सकता है, और इसे स्थानांतरित किया जाना चाहिए।

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

29

मुझे लगता है कि यदि आपको कई विधियों द्वारा उपयोग किया जाता है तो आपको केवल उन्हें कक्षा स्तर पर रखना चाहिए। अगर यह केवल उस विधि में प्रयोग किया जाता है तो यह मेरे लिए ठीक लग रहा है।

+0

धन्यवाद ठंड। मैं उस दिशा में सोच रहा था, लेकिन यह सुनकर उत्सुक था कि विधि घोषणा से बचने के कोई कारण हैं या नहीं। उदाहरण के लिए, मुझे तर्क से विचलित होने के तरीके में घोषित बहुत से प्रतियोगी मिलते हैं। – Liggy

+0

मैं पूरी तरह से सहमत हूं, मुझे लगता है कि निरंतर मूल्य को जितना संभव हो सके उतना बंद रखना महत्वपूर्ण है, ताकि समय के साथ आप स्वाभाविक रूप से स्थिरांक की समीक्षा कर सकें ताकि यह सुनिश्चित हो सके कि वे अभी भी समझ में हैं। जैसा कि ध्यान दिया गया है, यदि एक से अधिक विधि इसका उपयोग करती हैं तो स्थिर वर्ग स्तर होना चाहिए। –

+0

यदि निरंतर जानकारी का एक टुकड़ा होता है जिसे उपयोगकर्ता अपना हाथ (डिफ़ॉल्ट मान) पर प्राप्त करना चाहते हैं, तो इसे कक्षा स्तर पर स्कॉप्ड किया जाना चाहिए। नीचे दिए गए मेरे जवाब में, मैंने दिखाया कि MIN_INTEREST को सार्वजनिक एपीआई के माध्यम से सुलभ होने की आवश्यकता हो सकती है, और इसलिए, कक्षा में स्कॉप्ड किया जाना चाहिए। –

1

कारण आप कक्षा स्तर या विधि (स्थानीय) स्तर पर अंतिम चर परिभाषित कर सकते हैं क्योंकि आप (स्थानीय) विधि के अंदर वैश्विक स्थिर स्थिरता को ओवरराइड कर सकते हैं।

उदाहरण:

public class Test { 

    final double MIN_INTEREST = 0.0; 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 


     Test test = new Test(); 

     test.doSomethingLocal(); 
     test.doSomethingGlobal(); 

    } 

    public void doSomethingGlobal() { 

     System.out.println("Global-> " + MIN_INTEREST); 

    } 

    public void doSomethingLocal() { 

     final double MIN_INTEREST = 0.1; 

     System.out.println("Local-> " + MIN_INTEREST); 

    } 
} 

उत्पादन होगा:

Local-> 0.1 
Global-> 0.0 

तो आपके सवाल का कोई मतलब नहीं है।

+0

क्षमा करें अगर सवाल थोड़ा अस्पष्ट है। मैं सवाल फिर से लिखूंगा। विधि स्कोप्ड सबस्टेशन स्थिरांक सामान्य अभ्यास हैं? मुझे लगता है कि chills42 एक काफी अच्छा जवाब प्रदान किया। – Liggy

2

मैंने इस विधि को स्वयं को स्थिरांक स्थिरांक का उपयोग किया है, लेकिन प्रत्येक बार अक्सर एक सहयोगी कोड समीक्षाओं के दौरान इसे संशोधित कर देगा। दोबारा, ये सहयोगी ओपन सोर्स पढ़ने/लिखने में नहीं हैं लेकिन इन्हें एंटरप्राइज़ सॉफ्टवेयर में इस्तेमाल किया जाता है।

मैं उन्हें बताता हूं कि यदि एक विधि के भीतर इसका उपयोग किया जाता है तो कक्षा स्तर निरंतर उपयोग करने के लिए यह समझ में नहीं आता है, लेकिन मुझे 1 से अधिक सहयोगी मिलते हैं कि यह यूपी को स्थानांतरित कर दिया गया है। मैं आमतौर पर अनुपालन करता हूं क्योंकि मैं इतना कठोर नहीं हूं जब तक कि यह पठनीयता और/या प्रदर्शन को प्रभावित न करे।

3

सूचना छिपाने और मॉड्यूलरिटी महत्वपूर्ण सिद्धांत हैं, और संकीर्ण स्कॉइंग बेहतर जानकारी छिपाने वाली है। यदि स्थिरता केवल विधि द्वारा आवश्यक है, छुपा अच्छा है। यदि और जब निरंतर कहीं और उपयोगी होता है, तो इसे व्यापक दायरे में लाएं, लेकिन केवल उतना ही आवश्यक रूप से आवश्यक है।

आप शायद चिंतित हैं क्योंकि यह एक स्थिर है, और इसलिए, यह कुछ वैश्विक गुण तालिका से संबंधित प्रतीत हो सकता है। शायद यह करता है। शायद यह नहीं करता है। आपकी चिंता वैध है, लेकिन सभी स्थिरांक के लिए कोई भी सबसे अच्छी जगह नहीं है।

7

तकनीकी रूप से, जावा में "विधि स्कॉप्ड निरंतर" जैसी कोई चीज़ नहीं है। आप जो संदर्भ दे रहे हैं वह केवल अंतिम स्थानीय चर है; यह प्रत्येक विधि आमंत्रण के साथ एक नष्ट कर दिया गया है।

http://www.java-tips.org/java-se-tips/java.lang/how-do-i-declare-a-constant-in-java.html

1

मैं इस पर अलग राय है: IMHO इसके बेहतर फ़ाइल/वर्ग दायरे में उन्हें जगह खासकर यदि आप इस कारण के लिए टीमों में काम कर रहे हैं: कहते हैं कि तुम कोड का एक छोटा सा टुकड़ा के साथ शुरू .. ।

public void doSomething() { 

    final double MIN_INTEREST = 0.0; 

    // ... 
} 

और अन्य आप के सदस्यों के तरीकों के पूरे समूह के साथ वर्ग का विस्तार टीम और अब कक्षा एक अद्भुत 500 lines/50 methods विशाल वर्ग है। एक इंजीनियर के अनुभव की कल्पना करें जो स्थिरता के साथ एक नई विधि जोड़ने की कोशिश कर रहा है, उन्हें 1 को अपनी कक्षा से मेल खाने वाले स्थिरांक की तलाश करने वाले पूरे वर्ग को स्कैन करना होगा, 2 निरंतर कक्षा के दायरे में आगे बढ़ने की उम्मीद है कि मौजूदा कोई विवाद नहीं है कोड और भी अपनी विधि जोड़ते हैं।

आप के बजाय फ़ाइल/वर्ग गुंजाइश के साथ शुरू करने के लिए बिल्कुल स्थिरांक जोड़ते हैं, इंजीनियरों 2 दूसरों जहां यह समझ में आता है से कुछ स्थिरांक प्राप्त एक 1 ही स्थान मौजूदा स्थिरांक देखने के लिए है और,। (उदाहरण के लिए यदि आपके पास pi के लिए स्थिर है तो आप pi/2 के मान के साथ एक नया स्थिरांक भी परिभाषित करना चाहते हैं)।

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