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

  • bmarian22

    bmarian22

    22 Aralık 2007
  • DroidModderX ROOT Master

    DroidModderX

    14 ŞUBAT 2011
  • Study with Substance P

    Study with S

    31 Mayıs 2008