मेरे पास एक विधि है जो पैरामीटर के रूप में Map<Integer, Set<Object>>
लेती है। Map<Integer, Set<String>>
और पैरामीटर के रूप में Map<Integer, Set<Integer>>
का उपयोग करके, मुझे इसे दो अलग-अलग स्थानों से कॉल करने की आवश्यकता है।मानचित्र कास्टिंग <इंटीजर, सेट <Object>>
संकलक शिकायत इसलिए मैंने विधि पैरामीटर हस्ताक्षर Map<Integer, ?>
पर बदल दिया, और अब मैं इसे कॉल कर सकता हूं, लेकिन अलग-अलग समस्याएं हैं।
private void methodA (Map<Integer, ?> inOutMap, Integer key, Object value) {
Set<Object> list = new HashSet<Object>();
if (!inOutMap.containsKey(key)) {
list.add(value);
} else {
list = (Set<Object>) (Set<?>) inOutMap.get(key); //I wrote the cast, but looks quite ugly
list.add(value);
}
inOutMap.put(key, list); //compiler error
//The method put(Integer, capture#4-of ?) in the type Map<Integer,capture#4-of ?> is not applicable for the arguments (Integer, Set<Object>)
}
वहाँ संकलक त्रुटि के हल के लिए कोई तरीका है: विधि मूल रूप से इस प्रकार है? यह है, list
?
कास्टिंग।
मेरा दूसरा प्रश्न वैचारिक है। क्या अलग-अलग पैरामीटर हस्ताक्षर के साथ दो अलग-अलग तरीकों को लिखने के अलावा ऐसा करने का कोई बेहतर तरीका है?