दिलचस्प पोस्ट
क्या कस्टम तत्व वैध HTML5 हैं? ओवरराइड किए गए विधियों के बदले में भिन्न हो सकते हैं? क्या यह संभव क्वेरी डेटा है जो निर्दिष्ट स्थिति के बराबर नहीं है? स्टोरीबोर्ड पर आधारित लॉगिन स्क्रीन के लिए उदाहरण एनजी-सामग्री के अंदर एनजी-के लिए इस्तेमाल किया जा सकता है? जावा में एक स्ट्रिंग को कैसे विभाजित किया जाए XMLHttpRequest उत्पत्ति रिक्त की अनुमति नहीं है एक्सेस-कंट्रोल-अनुमति-फ़ाइल के लिए उत्पत्ति: /// फाइल करने के लिए: /// (सर्वरहीन) jQuery: jQuery में छुपा तत्व की ऊंचाई प्राप्त करें MySQL संग्रहीत कार्यविधियों का उपयोग उनको या उनका उपयोग करने के लिए नहीं कैसे django टेम्पलेट में शब्दकोश तत्व का उपयोग करने के लिए? Microsoft.Jet.OLEDB.4.0 'प्रदाता स्थानीय मशीन पर पंजीकृत नहीं है mysql :: तालिका में डालें, दूसरे तालिका से डेटा? पिछले शब्द को काटने के बिना, एक स्ट्रिंग से पहले एक्स वर्ण कैसे प्राप्त करें? विशिष्ट संपर्क प्रोग्राम को टेक्स्ट भेजें (व्हाट्सएप) जावास्क्रिप्ट इनहेरिटन्स

जावा – 'यह' कीवर्ड का उपयोग करने के लिए

जावा में this खोजशब्द का उपयोग करने के लिए सबसे अच्छा अभ्यास क्या है? उदाहरण के लिए, मेरे पास निम्न श्रेणी है:

 class Foo { Bar bar; public Foo(Bar bar) { this.bar = bar; } } 

यह ठीक है और सभी, लेकिन जावा बहुत चालाक है कि मैं यह जानना चाहता हूं कि अगर मैं कंस्ट्रक्टर में बयान बदलता हूं तो

  bar = bar; 

तो this खोजशब्द का उपयोग क्यों करें? (मैं कुछ परिस्थितियों में महसूस करता हूं, इसका उपयोग करने के लिए पूरी तरह से आवश्यक है, मैं सिर्फ इस तरह की परिस्थितियों के लिए पूछ रहा हूं)। दरअसल, मैं शुद्धता की खातिर शुद्धता के लिए कीवर्ड का प्रयोग करते हैं लेकिन आम अभ्यास क्या है? सभी दुकानों से इसका इस्तेमाल करते हुए मेरा कोड थोड़ा गंदा दिखता है, उदाहरण के लिए

 boolean baz; int someIndex = 5; this.baz = this.bar.getSomeNumber() == this.someBarArray[this.someIndex].getSomeNumber(); 

जाहिर है, कोड का एक छोटा सा लेकिन यह मेरी उदाहरण को दिखाता है। क्या यह केवल इन मामलों में निजी वरीयता के लिए है?

वेब के समाधान से एकत्रित समाधान "जावा – 'यह' कीवर्ड का उपयोग करने के लिए"

लेकिन जावा अगर मैं कन्स्ट्रेटर में बयान बदलता है तो यह जानना चालाक है कि क्या हो रहा है

  bar = bar; 

असत्य! यह संकलित है लेकिन यह ऐसा नहीं करता जो आपको लगता है कि यह करता है!

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

संदर्भ के रूप में, आप ओरेकल के जावा ट्यूटोरियल को इस बारे में जान सकते हैं।

http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

वास्तव में

 baz = baz 

इस चेतावनी को बढ़ाएगा

वेरिएबल बाज़ की असाइनमेंट का कोई प्रभाव नहीं है

तो आपको क्या लगता है कि गलत है, स्थानीय क्षेत्र वर्ग के गुण को ओवरराइड करते हैं, इसलिए आपको this विशेषता का उपयोग एक्सचेंज में वर्ण विशेषता को निर्दिष्ट करने के लिए करना चाहिए

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

में कहना चाहूंगा

इसका उपयोग this जहां कहीं भी उपयोग नहीं किया जाता है, यह अस्पष्टता (या संकलक चेतावनी, जो कि अधिक महत्वपूर्ण है) का कारण होगा, अन्यथा इसे छोड़ दें। जब से इसका उद्देश्य अचूकता को ठीक करना है, जब डिफ़ॉल्ट मान्यताओं (पहले चेक लोकल, तब क्लास एट्रिब्यूट्स की जांच करें) पर्याप्त नहीं हैं।

आपको इसका उपयोग तब करना चाहिए जब आपके पास समान नाम के साथ कोई पैरामीटर होगा, अन्यथा आप समस्याओं में नहीं चलेंगे यह संकलन करेगा, लेकिन जरूरी नहीं कि आप क्या करना चाहते हैं।

हर जगह के लिए, इसका उपयोग तब तक न करें जब तक कि पठनीयता के लिए इसके लिए आवश्यक न हो। यदि आप इसे हर जगह उपयोग करते हैं, तो आपके कोड का 20% शब्द 'यह' होगा!

this कीवर्ड वर्ग के ऑब्जेक्ट को संदर्भित करता है जिस पर कुछ विधि लागू की जाती है।
उदाहरण के लिए:

 public class Xyz { public Xyz(Abc ob) { ob.show(); } } public class Abc { int a = 10; public Abc() { new Xyz(this); } public void show() { System.out.println("Value of a " + a); } public static void main(String s[]) { new Abc(); } } 

Abc() हम Abc() को फोन कर रहे हैं जो एबीसी क्लास के ऑब्जेक्ट की जरूरत है। इसलिए हम इसे नए Abc() बजाय पास कर सकते हैं, क्योंकि अगर हम नए Abc() पास करते हैं तो यह अपने आप को बार-बार फोन करेगा

इसके अलावा हम इसका इस्तेमाल क्लास के वैरिएबल और विधि के स्थानीय चर को अलग करने के लिए करते हैं। जैसे

 class Abc { int a; void setValue(int a) { this.a = a; } } 

यहाँ यह। this.a वर्ग एबीसी की एक चर को संदर्भित करता है। इसलिए आप नए Abc().a; प्रयोग करते हुए उसी प्रभाव को प्राप्त कर रहे हैं Abc().a;

तो आप कह सकते हैं कि this वर्तमान वर्ग के ऑब्जेक्ट को दर्शाता है।

इस कीवर्ड का उपयोग स्पष्ट निर्माता अभिसार में आम है। आप दस्तावेज़ीकरण से एक उदाहरण देख सकते हैं।

 public class Rectangle { private int x, y; private int width, height; public Rectangle() { this(0, 0, 1, 1); } public Rectangle(int width, int height) { this(0, 0, width, height); } public Rectangle(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } ... } 
 public Foo(Bar bar) { this.bar = bar; } 

जैसे ही नहीं है

 public Foo(Bar bar) { bar = bar; } 

द्वितीय मामले में दायरे में पट्टी पैरामीटर है, इसलिए आप उसे स्वयं को आवंटित कर सकते हैं this.bar रहता है।

यह एक निजी पसंद है – एक शैली का चयन करें और उसे छड़ी। मैं व्यक्तिगत रूप से इसका उपयोग करता हूं लेकिन दूसरों को लगता है कि यह बेमानी है

सम्मेलन के आधार पर, आप इसे पठनीयता के लिए उपयोग कर सकते हैं। यह तथ्य पर बल देता है कि यह एक वस्तु चर है

मैं भी एक ही नाम के साथ सेटर तर्कों को चर के रूप में रखना चाहता हूं (विधि हस्ताक्षर में बेहतर दिखता है)। आपको इस मामले में इसकी आवश्यकता है।

मैं this कीवर्ड को स्थानीय क्लास ऑब्जेक्ट्स पर हमेशा उपयोग करने का प्रयास करता हूं।

मैं इसका उपयोग नेत्रहीन मुझे याद दिलाने के लिए करता हूं यदि कोई ऑब्जेक्ट स्थिर ऑब्जेक्ट या क्लास ऑब्जेक्ट है।

यह मेरी मदद करता है और संकलक विधि तर्क और स्थानीय वर्ग ऑब्जेक्ट के बीच अंतर करता है।

 public void setValue(int value){ this.value = value; } 

यह मुझे आंखों से मुझे याद दिलाने में सहायता करता है कि क्या कक्षा के ऑब्जेक्ट्स को ढांचे से अलग करने के लिए आंतरिक / नेस्टेड / अनाम वर्ग में ऐसा स्थानीय ऑब्जेक्ट है। क्योंकि अगर this उपसर्ग नहीं है, तो मेरा सम्मेलन मुझे याद दिलायेगा कि यह एंबेसमेटिंग क्लास का उद्देश्य है

 public class Hello{ public int value = 0; public boolean modal = false; public class Hellee{ public int value = 1; public getValue(){ if (modal) return 0; return this.value; } } } 
 void set(int real) { this.real = real; } 

यहां this एक ऐसा कीवर्ड है, जब उदाहरण चर स्थानीय चर के समान होता है।
इसका एक अन्य उपयोग कंस्ट्रक्टर ओवरलोडिंग है। यह एक अतिभारित कन्स्ट्रक्टर में कन्स्ट्रक्टर को कॉल कर सकता है।

निजी प्राथमिकता, लेकिन मैं इसे केवल अस्पष्टता को हल करने के लिए उपयोग करता हूं, और मुझे लगता है कि बहुत ही दुर्लभ मामले में यह स्पष्ट करने के लिए कि असाइन किए गए चर एक फ़ील्ड है। ऐसे कुछ प्रोजेक्ट हैं जहां लोग प्रत्येक क्षेत्र के संदर्भ पर "this.field" का उपयोग करते हैं। मुझे इस प्रथा को अस्पष्ट रूप से विचलित कर रही है, लेकिन आपको कुछ समय बाद ऐसा कोड देखने के लिए तैयार होना चाहिए।

मैं चुपके से सोचता हूं कि नरक में उन लोगों के लिए एक विशेष स्थान है, जो 500 लाइन कक्षाएं लिखते हैं, जिनमें 275 'इस' कीवर्ड होते हैं, लेकिन यह शैली कुछ खुले स्रोत परियोजनाओं में पाया जाता है,

क्लोनिंग ऑब्जेक्ट्स के लिए इसका उपयोग करें (एक कॉपी कन्स्ट्रक्टर के माध्यम से खुद का संदर्भ देकर)

ऑब्जेक्ट के लिए उपयोगी जो कि Cloneable

 public Foo implements Cloneable { private String bar; public Foo(Foo who) { bar = who.bar; } public Object getClone() { return new Foo(this); //Return new copy of self. } }