java - Invoking a method with generic parms using reflection -
मैं ज्ञात प्रकारों ( संचय फंक्शन
, resultBindings ) नीचे दिए गए चिंतनशील इनवोक रूटीन में, लेकिन मुझे परेशानी हो रही है। क्या कोई मुझे यह समझने में सहायता करता है कि यह कैसे प्राप्त किया जा सकता है?
पैकेज com.amir.method.compiler; // छुपा आयात आयात java.util.Set; पब्लिक क्लास संकलित रेफरींसेंटअटिटिविम विधि संकलित विधि (अंतिम कक्षा & lt;? & Gt; generatedClazz; // मैं इनवेस्टमेंट में नीचे दिए गए तर्कों को कैसे पारित करूं ?? अंतिम ज्ञातकामडेटा & lt; संचय फंक्शन & gt; accumulationFunction; अंतिम ज्ञात वर्क्सडेटा & lt; सेट & lt; निष्पादन योग्य & lt; इंस्टाससेट वैल्यू & gt; & gt; & gt; resultBindings; सार्वजनिक संकलित संदर्भित अभिलेख (अंतिम आंत हैश, अंतिम ज्ञातकरुकाडेटा, संचय फंक्शन & gt; संचय फंक्शन, अंतिम ज्ञातवर्कडेटा सेट करें & lt; निष्पादनीय & lt; इंस्टाससेटवैले & gt; & gt; परिणामबाइंडिंग्स) {this.generatedClazz = संदर्भित विशेषताप्रतिबंधक Generator.get ()। CompileMethod ("com.amir.hotspot.GeneratedGRAMethod "+ हैश," डायनामिकग्रा ", संचय फंक्शन, परिणामबिंडिंग्स); This.accumulationFunction = संचय फंक्शन; This.resultBindings = परिणामबाइंडिंग; } @Override सार्वजनिक WorkDataValue invokeCompiled (अंतिम उदाहरण onInst, अंतिम ExecutionParms parm, अंतिम WorkDataDefinition returntype, अंतिम TaskContext संदर्भ) {try {वापसी (WorkDataValue) this.generatedClazz .getMethod ( "dynamicGra", Instance.class, ExecutionParms.class, WorkDataDefinition। क्लास, टास्क कॉंटेन्टेक्स्ट। क्लास)। इन्वोक (रिक्त, अनन्य, परम, रिटर्नटाइप, यह। संकेतन कार्य, this.resultBindings, संदर्भ); } पकड़ (अपवाद ई) {नई ExecuteCompiledMethodException फेंकना (this.toString (), ई); }}}}
जैसा कि आप जेनेरिक और विभिन्न मापदंडों के साथ विधि अधिभार नहीं कर सकते (देखें:) आपको प्रतिबिंब एपीआई के साथ जेनेरिक के बारे में परेशान नहीं करना पड़ता है।
इसमें कोई अस्पष्टता नहीं है, आप इसे बस अपनी विधि प्राप्त कर सकते हैं:
विधि m = यह GeneratedClazz.getMethod ("गतिशीलग्रा", उदाहरण। वर्ग, निष्पादन पद। वर्ग, वर्कडाटाडिफ़िनिशन। वर्ग, ज्ञात वर्क्सडेटा। वर्ग, ज्ञात वर्क्सडेटा। वर्ग, टास्क कॉंटेन्टेक्स्ट। क्लास);
तो फिर तुम तो इसका मतलब शून्य के साथ आमंत्रण कि dynamicGra , स्थिर होना चाहिए अगर यह ऐसा नहीं है आप generatedClazz का उदाहरण आप कॉल करना चाहते हैं, जिस पर से गुजरना होगा विधि:
वस्तु उदाहरण = this.generatedClazz.newInstance (); // एक नया एक या generatedClazz m.invoke (उदाहरण, onInst, parm, returntype, this.accumulationFunction, this.resultBindings, संदर्भ) के किसी अन्य संदर्भ;
Comments
Post a Comment