Güvenlik türü: Kontrolsüz dökme
Bahar uygulama bağlamında dosyamda şöyle bir şey var:
<util:map id="someMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.String">
<entry key="some_key" value="some value" />
<entry key="some_key_2" value="some value" />
</util:map>
Java sınıfı, uygulama gibi görünüyor:
private Map<String, String> someMap = new HashMap<String, String>();
someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
Eclipse, yazan bir uyarı görüyorum
Güvenlik türü: nesneden Kontrolsüz dökme HashMap
Ben yanlış ne yaptım? Bu sorunu nasıl çözerim?
CEVAP
Eh, her şeyden önce, HashMap
oluşturma Yeni bir çağrı ile bellek harcıyorsun. İkinci satır tamamen bu oluşturulan hashmap referansı çöp toplayıcı için daha sonra kullanılabilir hale getirmek olur. Kullanın: bunu yapma
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
İkinci olarak, derleyici HashMap
eğer kontrol etmeden HashMap
bir nesneyi döküm şikayet ediyor. Ama, eğer yapacak olsan 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
döner Object
yazın ne olduğu bilinmiyor. Dönüştürme için HashMap
doğrudan değil, soruna neden olan ikinci dava (ve belki de orada olmadığını uyarı, ilk davanın nasıl emin değilim ukala Java derleyici ile Uyarılar için Java 5). Ancak, HashMap<String, String>
bir dönüştürme.
HashMaps gerçekten bir anahtar gibi bir nesne al ve eğer bir değer olarak bir nesne HashMap<Object, Object>
olan haritalardır. Böylece, hiçbir garanti o zaman senin bean olması temsil gibi bir HashMap<String, String>
da HashMap<Date, Calendar>
çünkü genel olmayan temsil döndürülen bir nesne.
Eğer kodu derler, ve herhangi bir hata olmadan String value = map.get("thisString");
yürütebilirsiniz, bu uyarı hakkında endişelenme. Ama eğer harita dize değerleri için dize anahtarlarını tamamen değil ama, jenerik bu durumda bunun olmasını engellemek olamaz çünkü zamanında ClassCastException
.
Nasıl kontrolsüz dökme uyarıları hitap...
Türü açısından Haskell tür vs newtype ...
Nasıl tamir&; türü ihtiyaç Listesi ifa...
Değer dökme türü 'Int32' hay...
Döngüsel bir başvuru türü 'ses hı...