SORU
4 Kasım 2008, Salı


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
4 Kasım 2008, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Air_Fooj

    Air_Fooj

    24 NİSAN 2009
  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • Jason Parker

    Jason Parker

    14 Aralık 2009