ठीक है, सबसे पहले, आप नए HashMap
निर्माण कॉल के साथ मेमोरी बर्बाद कर रहे हैं । आपकी दूसरी पंक्ति इस बनाए गए हैशमैप के संदर्भ को पूरी तरह से अस्वीकृत कर देती है, जिससे यह फिर कचरा कलेक्टर को उपलब्ध हो जाता है। तो, ऐसा मत करो, उपयोग करें:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
दूसरे, संकलक शिकायत कर रहा है कि आप वस्तु को HashMap
बिना जाँच के डालते हैं यदि वह ए HashMap
। लेकिन, भले ही आप ऐसा करें:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
आपको शायद अभी भी यह चेतावनी मिलेगी। समस्या है, getBean
रिटर्न Object
, इसलिए यह अज्ञात है कि प्रकार क्या है। इसे HashMap
सीधे रूप में परिवर्तित करने से दूसरे मामले में समस्या उत्पन्न नहीं होगी (और शायद पहले मामले में चेतावनी नहीं होगी, मुझे यकीन नहीं है कि जावा कंपाइलर जावा 5 के लिए चेतावनी के साथ कितना कठिन है)। हालाँकि, आप इसे एक में परिवर्तित कर रहे हैं HashMap<String, String>
।
HashMaps वास्तव में नक्शे हैं जो एक वस्तु को एक कुंजी के रूप में लेते हैं और एक वस्तु के रूप में एक मूल्य होता है, HashMap<Object, Object>
यदि आप करेंगे। इस प्रकार, इस बात की कोई गारंटी नहीं है कि जब आप अपने बीन को प्राप्त करते हैं कि इसका प्रतिनिधित्व HashMap<String, String>
इसलिए किया जा सकता है क्योंकि आपके पास हो सकता है HashMap<Date, Calendar>
क्योंकि गैर-जेनेरिक प्रतिनिधित्व जो लौटाया गया है उसमें कोई वस्तु हो सकती है।
यदि कोड संकलित करता है, और आप String value = map.get("thisString");
बिना किसी त्रुटि के निष्पादित कर सकते हैं, तो इस चेतावनी के बारे में चिंता न करें। लेकिन अगर नक्शा स्ट्रिंग मानों के लिए पूरी तरह से स्ट्रिंग कुंजियों का नहीं है, तो आपको एक ClassCastException
रनटाइम मिलेगा , क्योंकि जेनरिक इस मामले में होने से रोक नहीं सकते हैं।