Her şeyden önce, yeni HashMapyaratım çağrısıyla hafızayı boşa harcıyorsun . İkinci satırınız, bu oluşturulan hashmap'a yapılan referansı tamamen göz ardı ederek, çöp toplayıcı tarafından kullanılabilir hale getirir. Yani, bunu yapma, kullanın:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
İkincisi, derleyici, a olup HashMapolmadığını kontrol etmeden nesneyi a'ya attığınızdan şikayet ediyor HashMap. Ancak, yapsanız bile:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Muhtemelen hala bu uyarıyı alırsınız. Sorun, getBeangeri dönüyor Object, bu yüzden türün ne olduğu bilinmiyor. HashMapDoğrudan dönüştürmek ikinci durumda soruna neden olmaz (ve belki de ilk durumda bir uyarı olmaz, Java derleyicisinin Java 5 uyarılarıyla ne kadar bilgiç olduğundan emin değilim). Ancak, bunu bir HashMap<String, String>.
HashMaps gerçekten bir nesneyi anahtar olarak alan ve HashMap<Object, Object>eğer isterseniz bir nesne olarak bir değer olan haritalardır . Böylece, çekirdeğinizi aldığınızda, bunun temsil edilebileceğine dair bir garanti yoktur HashMap<String, String>, HashMap<Date, Calendar>çünkü sahip olabileceğiniz jenerik olmayan temsilin herhangi bir nesneye sahip olabileceğinden.
Kod derlenirse ve String value = map.get("thisString");hatasız çalışabiliyorsanız, bu uyarı hakkında endişelenmeyin. Ancak, harita tamamen dize değerlerine dize anahtarları değilse, bir ClassCastExceptionçalışma zamanında elde edersiniz , çünkü jenerikler bu durumda bunun olmasını engelleyemez.