क्या जावा में ऑब्जेक्ट को संयुक्त जेनेरिक प्रकार में डालना संभव है? अगर मैं एक वर्ग है कि दोनों इंटरफेस (फू & बार) को लागू करता हैमुझे जावा जेनेरिक के लिए कई सीमाओं के साथ कैसे डालना चाहिए?
public static <T extends Foo & Bar> void doSomething(T object) {
//do stuff
}
इस विधि कॉलिंग कोई समस्या नहीं है:
मैं की तरह एक विधि है।
समस्या तब होती है जब मुझे इस विधि को कॉल करने की आवश्यकता होती है जिसे मुझे पास करने की आवश्यकता होती है जिसे java.lang.Object
के रूप में प्राप्त किया जाता है और मुझे इसे कंपाइलर को खुश करने के लिए इसे डालने की आवश्यकता होती है। लेकिन मैं यह नहीं समझ सकता कि इस कलाकार को कैसे बनाया जाए।
संपादित करें:
समस्या इस तरह एक समारोह में निहित है:
public void problemFunction (Object o) {
if (o instanceof Foo && o instanceof Bar) {
doSomething((Problematic cast) o);
}
}
}
अच्छा विचार है:
बस इस के लिए हो जाता है। मैंने इसे थोड़ा अलग तरीके से इस्तेमाल किया। मैं 2 अलग-अलग प्रकार के ऑब्जेक्ट्स प्राप्त करने के लिए FooBarAdapter को प्राथमिकता देता हूं। == का उपयोग यह जांचने के लिए किया जा सकता है कि यह एक ही वस्तु है (कोई जरूरी नहीं है)। इस तरह, उनका संकलन समय प्रकार की जांच है। –
मैंने इस प्रतिनिधि पैटर्न को अज्ञात/नामित आंतरिक विधि वर्गों को एक ऑब्जेक्ट "कास्ट" करने के लिए जोड़ा जो मुझे बाध्य आवश्यकताओं के लिए कक्षाओं और इंटरफेस के एक सेट को विस्तार/कार्यान्वित करने के लिए जानता है। जॉन का जवाब देखें: http://stackoverflow.com/a/9514406/910718 –
और यह जावा भाषा की सीमा प्रतीत होता है क्योंकि स्कैला में एक ही JVM पर चल रहा है, यह o.asInstanceOf [बार के साथ फू] के रूप में आसान है। –