2012-09-26 21 views
5

मैं बजाय setters का उपयोग कर डिफ़ॉल्ट निर्माता में तर्क डालने के लिए ले लिया है, क्योंकि यह मदद करता है मुझे मेरे कोड का आयोजन बेहतरआप जावा में स्ट्रिंग कैसे शुरू करते हैं?

समस्या यह है कि एक परियोजना मैं कर रहा हूँ पर केवल चर एक स्ट्रिंग है और मैं है कि क्या यकीन नहीं है मुझे घोषणा में इसे एक वैश्विक चर के रूप में घोषित करना चाहिए (एक वैश्विक चर के रूप में?), एक सेटर उदाहरण विधि में या कक्षा कन्स्ट्रक्टर में इसे आरंभ करना है या नहीं। की स्थापना की

मैं अगर वहाँ कुछ भी इस बारे में समस्याग्रस्त किया जा सकता सोच रहा हूँ कि क्या उदाहरण है जब तक यह सेटर प्रयोग किया जाता है है initialised नहीं है:

class MyClass{ 

    private String myString; 

    public MyClass(){ 

    } 
    public void setStuff(String s){ 

    this.myString=s; 
    } 
} 
+2

मैं बिल्कुल यकीन है कि आप "वैश्विक चर" द्वारा क्या मतलब है के बाद से जावा वैश्विक चर नहीं है नहीं कर रहा हूँ। – Ivan

+2

आप जावा में 'इंस्टेंस वेरिएबल' नामक ग्लोबल वैरिएबल को कॉल कर रहे हैं .. और इंस्टेंस वैरिएबल को उनके डिफ़ॉल्ट मान में प्रारंभ किया गया है .. (यहां आपका स्ट्रिंग वैरिएबल शून्य हो जाएगा) –

+0

आपको [सूर्य/ओरेकल जावा ट्यूटोरियल] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html), विशेष रूप से यह आदिम डेटा प्रकारों पर। –

उत्तर

1

सुनिश्चित नहीं है कि वैश्विक चर से आपका क्या मतलब है? क्या यह वास्तव में एक चर है जो बनाई गई वस्तु के बावजूद वही है? यदि ऐसा है तो यह स्थिर

private static String myString = "str"; 

होना चाहिए यह तो कभी नहीं बदलता यह अंतिम होना चाहिए और है तो एक वैश्विक निरंतर

public static final String MY_STRING = "str"; 

यह तो जनता और

MyClass.MY_STRING 

के माध्यम से एक्सेस किया जा सकता है यदि यह केवल क्लास के प्रत्येक ऑब्जेक्ट के लिए लागू होता है जो या तो इसे कन्स्ट्रक्टर में या घोषणा में शुरू करता है

+0

धन्यवाद, यह सवाल का जवाब नहीं देता है लेकिन यह जानकारी का वास्तव में अच्छा बिंदु है। क्या आपको दिमाग होगा यदि मैंने इसे पूरा करने के लिए थोड़ा सा जवाब दिया है? – Magpie

+1

हाँ इसके लिए जाएं :) @ मैग्पी – RNJ

7

क्यों बस के रूप में प्रारंभ नहीं:

private String myString = "My string"; 

सबसे आसान तरीका संभव है।

+0

या 'myString = null;', अगर यह प्रारंभ में शून्य है, या 'myString = "";', यदि आप एक शून्य (खाली) स्ट्रिंग में प्रारंभ करना चाहते हैं। (लेकिन सभी वर्ग और आवृत्ति चर को 'शून्य' पर शुरू किया गया है, इसलिए 'myString = null;' स्थानीय चर के अलावा अनावश्यक है।) –

+2

@ हॉटिक्स। इसे स्वचालित रूप से शून्य करने के लिए शुरू नहीं किया जाएगा .. क्योंकि यह आवृत्ति चर है ?? –

+0

@ रोहितजैन - हाँ, मैं बस उस बिंदु को जोड़ने के लिए चारों ओर घूम रहा था। लेकिन कभी-कभी औपचारिकता को औपचारिकता के रूप में शुरू करना अच्छा लगता है। –

3

अच्छा, यह वास्तव में उस चर पर निर्भर करता है और यह क्या करने जा रहा है।

क्या यह स्थिर है? यदि ऐसा है, तो आप इसे इस तरह शुरू कर सकते हैं:

private final String myString = "foo"; 

क्या यह एक आवृत्ति चर होना है? यदि हां, तो आप कुछ इस तरह के लिए जाना चाहिए:

public MyClass(string myString) 
{ 
    this.myString = myString; 
} 

यह वैकल्पिक संपत्ति किसी तरह का है, जिस तरह से आप अब और साथ ही ठीक हो सकता है। अंत में, यह वास्तव में इस बात पर निर्भर करता है कि आप उस चर के साथ क्या करने जा रहे हैं।

+0

यदि यह स्थिर है, तो इसे स्थिर रखना चाहिए: निजी स्थिर अंतिम। –

+0

मैं सेटर्स का उपयोग करना चाहता हूं क्यों नहीं। – Magpie

+0

आपका क्या मतलब है कि आप "सेटर्स का उपयोग करना चाहते हैं"? हमें नहीं पता कि आप क्या करने की कोशिश कर रहे हैं, इसलिए हमारे लिए ऐसा करने के लिए सबसे अच्छा तरीका बताना हमारे लिए असंभव है। Mutators का उपयोग करने के लिए एक समय और एक जगह है; आपको "एक सेटटर का उपयोग नहीं करना चाहिए", आपको प्रत्येक स्थिति के लिए सबसे अच्छा क्या करना चाहिए, जो कभी-कभी एक सेटटर होगा और कभी-कभी नहीं होगा। –

0

यह वास्तव में MyClass पर निर्भर करेगा। अधिकांश समय, यह एक कन्स्ट्रक्टर होना सर्वोत्तम होता है जो निजी चर को प्रारंभ करेगा और इसके लिए गेटर और सेटर भी होगा।

एक कारण यह है कि क्या प्रारंभ करने के लिए करता है, तो MyClass एक विधि foo जो myString की जरूरत है और आप setStuff कॉल करने के लिए भूल गया है?

1

जैसा कि आपको लगता है कि यह मेरे लिए अच्छा लग रहा है। बीटीडब्लू, "ग्लोबल वैरिएबल" भ्रामक हो सकता है क्योंकि यह इंगित कर सकता है कि var सार्वजनिक है, जबकि यह निजी है लेकिन सार्वजनिक गेटर/सेटर के माध्यम से बाहर सुलभ है।

लेकिन एक स्ट्रिंग प्रारंभ करने में, सबसे आसान तरीका है:

private String foo = "some string"; 
+1

यह "foo" क्या है? – Magpie

+0

क्या आप गंभीर हैं? यह स्ट्रिंग वेरिएबल – amphibient

+2

@ मैग्पी - "फू" ("बार" के साथ) का नाम एक उदाहरण प्रोग्राम में चर के लिए पारंपरिक नाम है। सैन्य पहचान के संक्षिप्त रूप से अप्रत्यक्ष रूप से आता है FUBAR - F (ouled) सभी पहचान से परे। –

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