में पारित नई वस्तु के संदर्भ में रखें क्या किसी रचनाकार में बनाए गए किसी ऑब्जेक्ट का संदर्भ बनाए रखने का कोई अच्छा तरीका है जिसे कुछ विस्तारित वर्ग के सुपर कन्स्ट्रक्टर को पारित करने की आवश्यकता है (इसे सुपर से सुलभ बनाने के अलावा कक्षा या इसे पैरामीटर के रूप में निर्माता में गुजर रहा है)?सुपर कन्स्ट्रक्टर
मुझे एक उदाहरण के साथ स्पष्टीकरण दें। इस प्रकार
class TestA {
TestA(Object foo) {}
}
अब फैली इस वर्ग, मैं चाहते हैं: इस वर्ग (जो मैं संशोधित नहीं कर सकते और जो मुझे foo के लिए उपयोग नहीं देता है) ले लो
class TestB extends TestA {
Object myCopyOfFoo;
TestB() {
super(new Object());
}
}
है वहाँ myCopyOfFoo
में बनाए गए new Object()
को स्टोर करने का एक अच्छा तरीका है?
न तो इन तीन विचारों में से एक काम करते हैं:
TestB() {
myCopyOfFoo = new Object();
super(myCopyOfFoo);
}
(त्रुटि: निर्माता कॉल एक निर्माता में पहले बयान होना चाहिए)
TestB() {
super(myCopyOfFoo = new Object());
}
(त्रुटि: एक उदाहरण क्षेत्र myCopyOfFoo का उल्लेख नहीं कर सकते जबकि स्पष्ट रूप से एक कन्स्ट्रक्टर का आह्वान करते हुए)
TestB() {
super(makeFoo());
}
Object makeFoo() {
myCopyOfFoo = new Object();
return myCopyOfFoo;
}
(त्रुटि: मैं एक संदर्भ नहीं दे सकता nstance विधि जबकि स्पष्ट रूप से एक निर्माता)
मुझे लगता है मैं निम्नलिखित कर सकता है लागू है, लेकिन यह न तो धागा सुरक्षित है और न ही सुरुचिपूर्ण है:
static Object tempFoo;
TestB() {
super(tempFoo = new Object());
myCopyOfFoo = tempFoo;
}
किसी को भी मेरे लिए एक बेहतर विचार है? और पृथ्वी पर क्यों मेरे पहले दो विचार कानूनी नहीं हैं?
यह एक अच्छा समाधान है कि वास्तव में मेरे कोड अच्छी तरह से फिट बैठता है, के बाद से मैं पहले से ही वैसे भी कई मामलों में दूसरे निजी निर्माता का उपयोग कर रहा तरह दिखता है। मैं इस जवाब को पहले ही चेक-इन करने का लुत्फ उठा रहा हूं, लेकिन यह अभी भी बहुत सारे कोड की तरह दिखता है।मुझे शक है, लेकिन देखते हैं कि कोई भी छोटा सुझाव है या नहीं। लेकिन पहले से ही धन्यवाद! –
@ मार्कस: मेरे पास एक संभावित सुझाव है यदि आपका * वास्तविक * मामला वास्तव में पहले ही पैरामीटर लेता है, और एक प्रति बनाता है। यदि आपके द्वारा दिया गया कोड वास्तव में प्रतिनिधि है (यानी यह कुछ भी नहीं से नई वस्तु बना रहा है) तो मेरा अन्य सुझाव मदद नहीं करेगा। हालांकि मैं इसे संपादित कर दूंगा। –