मैं निम्न समस्या से जूझ रहा हूं। मेरे पास फ़ंक्शन ऑब्जेक्ट्स की श्रृंखला है, प्रत्येक में इसका स्वयं का इनपुट और आउटपुट प्रकार जावा में सामान्य प्रकार के तर्कों के माध्यम से परिभाषित किया गया है। मैं इन्हें एक श्रृंखला में व्यवस्थित करना चाहता हूं ताकि कच्चा डेटा पहले फ़ंक्शन में इनपुट हो, जो आउटपुट प्रकार में परिवर्तित हो, जो अगली ऑब्जेक्ट का इनपुट प्रकार है, और इसी तरह। बेशक यह हार्ड-कोड के लिए तुच्छ होगा, लेकिन मैं कोड को नए फ़ंक्शन ऑब्जेक्ट्स के लिए प्लग करने योग्य बनाना चाहता हूं। अगर मैं सिर्फ प्रकार तर्क (केवल अंतिम आउटपुट प्रकार) बाहर छोड़ देते हैं, यह कैसे चीजें दिखते हैं:जावा जेनरिक: जेनेरिक फ़ंक्शन ऑब्जेक्ट को एक साथ जोड़ना
public T process() {
Iterator<Context> it = source.provideData();
for(Pipe pipe : pipeline) {
it = pipe.processIterator(it);
}
return sink.next(it);
}
यहाँ डेटा पर पुनरावर्तक समारोह वस्तुओं के बीच पारित हो जाता है, और संदर्भ संदर्भ होना चाहिए। क्या निम्न प्रकार की पाइप प्लग करने योग्य और अभी भी प्रकार की सुरक्षा बनाए रखने का कोई तरीका है?
संपादित करें: स्पष्टता के लिए, मेरे पास फ़ंक्शन ऑब्जेक्ट्स, पाइप की एक श्रृंखला है। प्रत्येक इनपुट को एक विशेष प्रकार के रूप में लेता है और दूसरे प्रकार का आउटपुट करता है। (वास्तव में इन प्रकारों पर एक पुनरावर्तक) इन्हें एक साथ जोड़ दिया जाएगा, उदाहरण के लिए, Pipe<A,B> -> Pipe<B,C> -> Pipe<C,D> -> ...
, ताकि एक पाइप का आउटपुट अगले पाइप के लिए इनपुट प्रकार हो। यहां एक स्रोत भी है जो टाइप ए के इटरेटर को आउटपुट करता है, और एक सिंक जो प्रकार (पिछले पाइप का आउटपुट) स्वीकार करेगा। क्या यह चीजों को स्पष्ट बनाता है? सवाल यह है कि, इनपुट और आउटपुट प्रकारों की संगतता पर महत्वपूर्ण निर्भरता है, क्या यह सुनिश्चित करने का कोई तरीका है?
मुझे लगता है कि पाइपलाइन में फ़ंक्शन ऑब्जेक्ट्स डालने पर टाइप सुरक्षा सुनिश्चित करने का सबसे अच्छा समय हो सकता है, लेकिन मुझे यकीन नहीं है कि यह कैसे करें।
संपादित 2: मैं समारोह वस्तुओं है कि वर्तमान में नीचे की तरह दिखता है के लिए एक योजक विधि है:
public void addPipe(Pipe<?,?> pipe) {
pipeline.add(pipe);
}
मैं जाँच करने के लिए करता है, तो पहले प्रकार पैरामीटर के "अंत" के रूप में ही है करना चाहते हैं वर्तमान पाइप, और अगर अपवाद फेंक दिया? मुझे नहीं लगता कि यहां संकलन समय सुरक्षा प्राप्त करने का एक अच्छा तरीका है। वर्तमान पाइप का "अंत" तब इनपुट पाइप के दूसरे प्रकार के पैरा पर सेट किया जा सकता है। मैं जेनिक्स के साथ ऐसा करने के बारे में नहीं सोच सकता, और कक्षा की जानकारी के चारों ओर गुज़रना बहुत भयानक लगता है।
टाइप मिरर पूरी तरह से सामान्य कार्यों के लिए आपके जीवन को कठिन बना सकता है। जेवीएम बाइट कंपाइलर सामान्य वर्गों के उदाहरण से प्रकार को हटा देता है, इसलिए सूची सूची
क्या आप आवश्यकता को और अधिक समझ सकते हैं? यह पता लगाने में असमर्थ कि आपके पास क्या है और आप क्या चाहते हैं। –
तो पाइप फ़ंक्शन ऑब्जेक्ट (कैसे ??) डालने पर टाइप सुरक्षा सुनिश्चित करने के लिए सबसे अच्छा तरीका होगा और इस उपरोक्त विधि पर चेतावनियों को दबाएं? – downer