गोएट्ज़ का Java Concurrency in Practice, पृष्ठ 41, उल्लेख करता है कि this
संदर्भ निर्माण के दौरान बच सकता है। एक उदाहरण "यह मत करो":"अपूर्ण रूप से निर्मित वस्तु" क्या है?
public class ThisEscape {
public ThisEscape(EventSource source) {
source.registerListener(
new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
});
}
}
यहाँ this
तथ्य यह है कि doSomething(e)
enclosing ThisEscape
उदाहरण के लिए संदर्भित करता माध्यम से "से बचने" है। सार्वजनिक कन्स्ट्रक्टर (सभी काम करने) के बजाय स्थैतिक फैक्ट्री विधियों का उपयोग करके स्थिति तय की जा सकती है (पहले सादे ऑब्जेक्ट का निर्माण करें, फिर श्रोता को पंजीकृत करें)। पुस्तक जारी है:
अपने कन्स्ट्रक्टर के भीतर से एक ऑब्जेक्ट प्रकाशित करना एक अपूर्ण रूप से निर्मित ऑब्जेक्ट प्रकाशित कर सकता है। यह सच है भले ही प्रकाशन निर्माता में अंतिम विवरण है। यदि
this
संदर्भ निर्माण के दौरान बच निकलता है, तो वस्तु को पर सही ढंग से निर्मित नहीं किया जाता है।
मुझे यह काफी नहीं मिलता है। यदि प्रकाशन निर्माता में आखिरी बयान है, तो क्या इससे पहले सभी निर्माण कार्य नहीं किए गए हैं? this
तब तक मान्य नहीं है? जाहिर है उसके बाद कुछ वूडू चल रहा है, लेकिन क्या?
वाह, यह आश्चर्य की बात है कि 'अंतिम' फ़ील्ड, जिन्हें आम तौर पर समवर्ती मित्र माना जाता है, इस मामले में अपराधी हैं! –
@ जुनास: यह रगड़ है - वे समेकन-अनुकूल हैं * यदि आप सुनिश्चित करते हैं कि संदर्भ कन्स्ट्रक्टर * से नहीं बचता है। ज्यादातर मामलों में भुगतान करने के लिए एक बहुत ही कम कीमत है। –
असल में, यह किसी भी फ़ील्ड पर लागू होता है, न केवल अंतिम वाले। –