Her şeyden önce, yeni HashMap
yaratı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 HashMap
olmadığı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, getBean
geri dönüyor Object
, bu yüzden türün ne olduğu bilinmiyor. HashMap
Doğ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.