चाहता है मैं वर्तमान में हल्के, सामान्य उद्देश्य सिमुलेशन फ्रेमवर्क विकसित कर रहा हूं। लक्ष्य लोगों को सिमुलेशन और परिदृश्य वस्तुओं को उनके डोमेन-विशिष्ट आवश्यकताओं के लिए उप-वर्ग करने की अनुमति देना है। जेनेरिक इसे प्राप्त करने के लिए एक उचित तरीका की तरह लग रहा था, लेकिन मुझे डर है कि मैं जेनेरिक नरक में डुबकी लगा सकता हूं।जावा जेनेरिक नरक - इसमें पास होना लेकिन यह टाइप टी
Sim
वस्तु सिमुलेशन संस्थाओं के लिए पहुँच प्रदान करता है और सिम (शुरू/रोकें/बंद)
Scenario
वस्तु आप अनुकरण संस्थाओं के साथ सिम को भरने के लिए अनुमति देता है नियंत्रित करता है।
सिम:
public class Sim
{
public <T extends Sim> void loadScenario(Scenario<T> scenario)
{
reset();
scenario.load(this);
}
}
परिदृश्य:
public interface Scenario<T extends Sim>
{
public void load(T sim);
}
लक्ष्य है उन बनाने के लिए एक MySim
कि extends Sim
अनुमति देते हैं और एक MyScenario
कि implements Scenario<MySim>
अपने डोमेन के लिए करने के लिए।
उदा। MyScenario:
public class MyScenario<MySim>
{
public void load(MySim sim)
{
// make calls to sim.addMySimEntity(...)
}
}
विशेष रूप से, ऊपर कोड का उपयोग कर, Sim.loadScenario
में scenario.load(this)
कॉल मुझे त्रुटि देता है: विधि लोड (टी) प्रकार परिदृश्य में तर्क (सिम) के लिए लागू नहीं है। मैं समझता हूं क्योंकि यह this
(जो कि Sim
प्रकार है) T extends Sim
है जिसका मतलब है कि किसी भी तरह से मुझे किसी ऑब्जेक्ट में गुजरना चाहिए जो सिम का कोई सबटाइप हो सकता है।
मैं जो हासिल करना चाहता हूं उसे प्राप्त करने के लिए इस मुद्दे को सुधारने का तरीका क्या है? या, क्या यह भी संभव है? शायद जेनेरिक मेरे लिए ऐसा नहीं कर सकते हैं।
मुझे लगता है कि यह सर्कुलर जेनेरिक संदर्भों के बारे में पूछे गए एक प्रश्न से संबंधित हो सकता है: http://stackoverflow.com/questions/2567595/creating-circular-generic-references –