Ну, во-первых, вы тратите память на новый вызов создания 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
во время выполнения, потому что генерики не могут заблокировать это в этом случае.
Родственных/простофилей: [Как я обращаюсь непроверенные предупреждения актеров?] (Http://stackoverflow.com/q/509076) – blahdiblah 2013-03-11 19:15:18
возможного дубликата из [Как удалить непроверенные предупреждения о броске?] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings) – 2014-08-19 11:16:24
Я придумал рутину, чтобы на самом деле проверить личность для параметризованного HashMap, который устраняет предупреждение без предупреждения: [link] (http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings/509230#509230) Я бы сказал, это это «правильное» решение, но может ли оно быть спорным. :) – skiphoppy 2009-02-04 17:27:22