public class App {
private final A a;
private final Server server;
public App(){
a = new A(this); //Bad, this is escaping before it's initialized.
}
@Subscribe //This event fires some time after App is finished constructing.
public void registerStuff(RegisterEvent event){
server = event.getServer(); //Not possible due to final field and this not being the constructor, is there such thing as a lazy final?
a.register();
}
}
public class A {
private final App app;
private final BuilderSpec spec;
public A(App app){
this.app = app;
this.spec = app.getServer().builder(this.app).build();
}
public void register(){
app.getServer().doStuff(this.app, this.spec);
}
}
मैंने "यह" भागने के बारे में कुछ पढ़ा है और महसूस किया है कि पिछला कोड खराब है, क्योंकि मुझे पता नहीं है कि बाहरी प्रक्रियाएं क्या कर रही हैं यह संदर्भ, इसलिए इसे निर्माणकर्ता के बाहर तब तक पारित नहीं किया जाना चाहिए जब तक कि इसका निर्माण न हो जाए।अंतिम फ़ील्ड के साथ निर्माण के दौरान "इस" से बचने से रोकना
हालांकि, ऐप और ए दोनों में अंतिम फ़ील्ड के कारण, मैं वास्तव में नहीं देखता कि मैं इसे बाद में, या आलसी कैसे शुरू कर सकता हूं। खेतों को आखिरी कम महत्वपूर्ण बना रहा है तो यह बच निकल रहा है? मुझे यकीन नहीं है।
यह स्वचालित रूप से खराब नहीं है, और आपके पास क्या ठीक है। आपको केवल सावधान रहना होगा कि आपके ऑब्जेक्ट को कन्स्ट्रक्टर से बाहर करने से पहले एक स्थिर स्थिति में है। इसे टालना है, हां, लेकिन यदि आपके पास गोलाकार निर्भरता है (जैसा कि आप करते हैं) और दोनों आइटम 'अंतिम' क्या हैं तो कोई विकल्प नहीं है। –
ऐसी गोलाकार निर्भरता होने के नाते मुझे लगता है कि बहुत अच्छा नहीं है ... नहीं ?? – Codebender
@ एबिशेक मानोहरन परिपत्र निर्भरता पूरी तरह से प्राकृतिक हैं। वे पूरी तरह से व्यवस्थित रूप से हर समय होते हैं और निश्चित रूप से सामान्य ओओ मॉडलिंग का हिस्सा हैं। –