Nun, zuerst verschwenden Sie Speicher mit dem neuen Erstellungsruf HashMap
. Ihre zweite Zeile ignoriert den Verweis auf diese erstellte Hashmap vollständig und stellt sie dem Garbage Collector zur Verfügung. Also, tun Sie das nicht, zu verwenden:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
Zweitens der Compiler beschwert sich, dass Sie das Objekt zu einem HashMap
werfen, ohne zu überprüfen, ob es ein HashMap
ist. Aber selbst wenn Sie es tun würden:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Sie würden wahrscheinlich immer noch diese Warnung erhalten. Das Problem ist, getBean
gibt Object
zurück, so dass es unbekannt ist, was der Typ ist. Wenn man es direkt in HashMap
umwandelt, würde das Problem mit dem zweiten Fall nicht auftreten (und vielleicht würde es im ersten Fall keine Warnung geben, ich bin mir nicht sicher, wie pedantisch der Java-Compiler mit Warnungen für Java 5 ist). Sie konvertieren es jedoch in HashMap<String, String>
.
HashMaps sind wirklich Karten, die ein Objekt als Schlüssel nehmen und ein Objekt als Wert haben, HashMap<Object, Object>
, wenn Sie so wollen. Daher gibt es keine Garantie, dass, wenn Sie Ihre Bean erhalten, dass es als HashMap<String, String>
dargestellt werden kann, weil Siehaben könnten, weil die nicht generische Darstellung, die zurückgegeben wird, beliebige Objekte haben kann.
Wenn der Code kompiliert und Sie String value = map.get("thisString");
ohne Fehler ausführen können, machen Sie sich keine Sorgen über diese Warnung. Wenn die Map jedoch nicht vollständig aus Zeichenfolgenschlüsseln besteht, um Zeichenfolgenwerte zu erhalten, erhalten Sie zur Laufzeit einen Wert ClassCastException
, da die Generika dies in diesem Fall nicht blockieren können.
Verwandte/Betrogene: (http://stackoverflow.com/q/509076) – blahdiblah
möglich doppelte [Wie kann ich nicht markiert Guss Warnungen sprechen?] von [Wie adressiere ich ungeprüfte Zauberwarnungen?] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings) –
Ich kam mit einer Routine, um die Besetzung zu überprüfen zu parametrisieren HashMap, die die ungeprüfte Cast-Warnung beseitigt: [link] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings/509230#509230) Ich würde das sagen ist die "richtige" Lösung, aber ob es wert ist oder nicht, könnte strittig sein. :) – skiphoppy