समस्या:जेनेरिक्स: एक मानचित्र में कुंजी और मूल्यों के बीच प्रतिबंध लागू करने के लिए कैसे
public static interface FunctionObject<T> {
void process(T object);
}
मैं की जरूरत है यह सामान्य मैं टी का उपयोग करना चाहते है क्योंकि: मैं एक समारोह वस्तु इंटरफ़ेस एक वर्ग में परिभाषित किया गया है प्रक्रिया कार्यान्वयन में तरीकों।
Map<Class<T>, FunctionObject<T>> map;
लेकिन मैं यह भी उप प्रकार वर्गों और के supertypes के समारोह वस्तुओं स्वीकार करने के लिए मैप हैं:
फिर, अन्य सामान्य वर्ग में, मैं एक नक्शा है, जहां मैं मूल्यों के रूप में कुंजी और समारोह वस्तुओं के रूप में वर्ग है कुंजी प्रकार है, तो मैंने किया था यह:
//if T were Number, this should be legal
map.put(Class<Integer>, new FunctionObject<Integer>(){...});
map.put(Class<Float>, new FunctionObject<Number>(){...});
map.put(Class<Double>, new FunctionObject<Object>(){...});
मैं चाहता हूँ के रूप में:
Map<Class<? extends T>, FunctionObject<? super T>> map; //not what I need
मूल विचार के रूप में इस मानचित्र का उपयोग करने में सक्षम होना है
Map<Class<E extends T>, FunctionObject<? super E>>> map;
मैं कैसे वांछित प्रभाव को प्राप्त कर सकते हैं: लागू FunctionObject वर्ग कुंजी या एक महाप्रकार के प्रकार है, क्या मैं वास्तव में परिभाषित करना चाहते हैं यह है? एक टाइपएफ़ हेटरोजेनस कंटेनर एकमात्र विकल्प है? मानचित्र जेनेरिक प्रकारों को संदर्भ से पॉप्युलेट करने की अनुमति देने के लिए कैसा लगेगा?
उपयोग के मामले के आधार पर काम कर सकता है। –
हां, लेकिन प्राप्त करने का क्रिया तब होता है जब मजा एक्सडी शुरू होता है। –
'मिल()' ही कभी लौट सकते हैं 'FunctionObject