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

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Elefant Traks

    Elefant Trak

    5 HAZİRAN 2007
  • spederson7

    spederson7

    17 Temmuz 2006