Ну, во-первых, вы тратите память на новый HashMapвызов создания. Ваша вторая строка полностью игнорирует ссылку на этот созданный hashmap, делая его доступным для сборщика мусора. Итак, не делайте этого, используйте:
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
Во-вторых, компилятор жалуется, что вы приводите объект к HashMapбез проверки, является ли он HashMap. Но, даже если вы должны были сделать:
if(getApplicationContext().getBean("someMap") instanceof HashMap) {
private Map<String, String> someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap");
}
Вы, вероятно, все еще получите это предупреждение. Проблема в том, что getBeanвозвращается Object, поэтому неизвестно, что это за тип. Преобразование в HashMapнапрямую не вызовет проблемы во втором случае (и, возможно, в первом случае не будет предупреждения, я не уверен, насколько педантичен компилятор Java с предупреждениями для Java 5). Тем не менее, вы конвертируете его в HashMap<String, String>.
HashMaps - это действительно карты, которые принимают объект в качестве ключа и имеют объект в качестве значения, HashMap<Object, Object>если хотите. Таким образом, нет никакой гарантии, что когда вы получите свой bean-компонент, он может быть представлен как, HashMap<String, String>потому что вы можете иметь это, HashMap<Date, Calendar>потому что возвращаемое неуниверсальное представление может иметь любые объекты.
Если код компилируется, и вы можете выполнить его String value = map.get("thisString");без ошибок, не беспокойтесь об этом предупреждении. Но если карта не полностью содержит строковые ключи для строковых значений, вы получите ClassCastExceptionво время выполнения, потому что в этом случае универсальные блоки не могут этого предотвратить.