Django & amp; Сельдерей, задачи не активируются при использовании venv

Ну, во-первых, вы теряете память при новом вызове создания 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 во время выполнения, потому что генерики не могут заблокировать это в этом случае.

0
задан ElRey777 18 March 2019 в 14:37
поделиться