2013-08-11 8 views
5

मेरी जावा परियोजनाओं में से कई के लिए, मैं डेटाबेस का व्यापक रूप से उपयोग करता हूं, जो मैं आमतौर पर करता हूं वह मेरे सभी तारों और सेटिंग्स को पकड़ने के लिए property.xml फ़ाइल है।जावा में किस तरह का वैश्विक चर खराब व्यवहार है?

और फिर मेरे पास xml फ़ाइल में मौजूद सभी स्थिर स्थिरांक रखने के लिए CNST कक्षा होगी।

कार्यक्रम शुरू होने पर एक बार xml फ़ाइल द्वारा उन स्थिरांक को प्रारंभ किया जाता है, और प्रोग्राम में कहीं भी ग्लोबल्स के रूप में उपयोग किया जाता है।

हालांकि, इन दिनों कई लेख पढ़ने के बाद, ऐसा लगता है कि ग्लोबल्स का उपयोग करना इतना अच्छा अभ्यास नहीं है। तो क्या कोई इस स्थिति के लिए एक अच्छा अभ्यास इंगित कर सकता है? धन्यवाद।

+0

इसके बजाय संसाधन फ़ाइल का उपयोग करें ... देखें 'गुण' – nachokk

उत्तर

1

सामान्य ग्लोबल वैरिएबल में जब संभव हो तो इससे बचा जाना चाहिए => हालांकि यह स्थिर नहीं है यदि यह स्थिरांक है।यह एक है जब आप (शायद) को प्रारंभ शुरुआत में वस्तु और कुछ भी नहीं आवरण इस वैश्विक-सेटिंग की तरह के मामलों के लिए बाद में बदल दिया गया है, इन विकल्प हैं:

  • होने स्थिरांक (public static final) जो static ब्लॉक में प्रारंभ कर रहे हैं
  • चर होने private static finalstatic ब्लॉक में प्रारंभ और ही टिककर खेल
  • एक सिंगलटन बनाना और चर होने के माध्यम से अवगत कराया private final ही टिककर खेल के माध्यम से अवगत कराया

दूसरे और तीसरे बिंदु का लाभ 1 से अधिक है कि गेटटर विधियों में आपने चर के मानों को समाहित किया है और उस कोड को बदल/डालने वाले कोड को बदल सकता है जो उस पर निर्भर (कॉलिंग) कोड को प्रभावित किए बिना कॉलिंग विधि पर वापस लौटाया जा सकता है।

+0

यह बहुत अच्छा है, धन्यवाद। हालांकि, दूसरे और तीसरे विकल्प के लिए, जो बेहतर हो सकता है? मैंने अपना प्रश्न विस्तृत किया है [जावा में वैश्विक स्थिरांक प्रकाशित करने का बेहतर तरीका क्या है?] (Http://stackoverflow.com/questions/18169614/what-is-the-better-way-of-publishing-global-constants -इन-जावा), कृपया एक नज़र डालें, धन्यवाद – Will

0

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

public class Global { 

    public static final int A; 
    public static final int B; 

    private Global() {} // use only when you have only static fields and methods 

    static { 
     A = 1; 
     B = 2; 
    } 
} 
+0

हां, यह वही है जो मैंने किया था। लेकिन 'ग्लोबल = भयानक' के बारे में उन सभी लेखों ने मुझे थोड़ा सा फिक्र किया। – Will

+0

जावा में यह सामान्य और उपयोगी अभ्यास है। आप इन निर्माणों का उपयोग कर सकते हैं और यह "भयानक" अभ्यास नहीं है। शायद लेखों में सार्वजनिक गैर स्थैतिक और गैर-आधार क्षेत्रों के बारे में लिखा गया था? –

+0

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

0

आप के बजाय एक public static चर वैश्विक चर कि एक बेहतर विचार होगा बना सकते हैं।

यह link देखें।

एक अन्य दृष्टिकोण एक वर्ग है कि singleton पद्धति का अनुसरण करता बनाने के लिए है, इसलिए वहाँ केवल वर्ग का एक उदाहरण हो सकता है और get और set तरीकों के साथ सिंगलटन वर्ग है और यह उपयोग में चर रख सकते हैं।

Edit1: -

स्थिरांक की घोषणा के मामले में पुरानी शैली के लिए जाओ। कुछ ऐसा: -

(public/private) static final TYPE NAME = VALUE; 

मैं उस मामले में एक वर्ग बनाने की अनुशंसा नहीं करता।

+0

यही मैंने किया था। मैंने अपने सभी सार्वजनिक स्थिर चर रखने के लिए एक वर्ग का उपयोग किया, ताकि मैं उन्हें विश्व स्तर पर स्थिरांक के रूप में उपयोग कर सकूं। मैं अब थोड़ा उलझन में हूं, मुझे ऐसा करना चाहिए या नहीं? – Will

+0

हां यह एक बेहतर विचार होगा। –

+0

आप मेरे उत्तर में उल्लिखित सिंगलटन क्लास बना सकते हैं और फिर प्राप्त करने और सेट विधि का उपयोग करके चर का उपयोग कर सकते हैं। वैश्विक वैरिएबल का उपयोग करके यह एक बेहतर तरीका होगा। :) –

1

वैश्विक चर का उपयोग करना मतलब है कि वे कई कक्षाओं के लिए दृश्यमान हैं जो डेटा को कुशल बना सकते हैं।

तो आपको अपने डेटा का ख्याल रखना होगा कि यह व्यापक रूप से दिखाई दे रहा है।

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

अभ्यास की बात है मैं निम्नलिखित बातों का पालन करें:

  1. चर दृश्यता कम से कम रखें, यदि संभव हो तो निजी।
  2. जहां भी संभव हो इसे अपरिवर्तनीय बनाएं।
+0

तो इसका मतलब यह है कि जब तक मेरा वैश्विक चर स्थिरांक होता है, तो वे ठीक हैं? – Will

+0

यूप, स्थिरांक वैश्विक हो सकते हैं। असल में यदि आपके पास स्थिर स्थिर चर का उपयोग स्थिरांक के रूप में किया जा रहा है, तो इसका लाभकारी है। – Lokesh

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