Самый безопасный и эффективный способ справиться с этим, вероятно:
Map<?, ?> session = ActionContext.getContext().getSession();
, а затем введите приведение объектов, извлеченных из карты сеанса.
Подход @SuppressWarnings фактически приведет к тому, что скомпилированный код будет идентичен. Однако приведение типа будет неявным; то есть это будет нелегко определить, посмотрев на исходный код. А аннотация @SuppressWarnings может (гипотетически) подавить некоторые другие предупреждения в том же блоке кода, который представляет собой реальную ошибку; то есть тот, который приведет к сбою одного из скрытых типов и т. д. во время выполнения.
Другие более дорогие альтернативы включают:
запись путем записи записи из Map<?, ?>
в новый Map<String, Serializable>
экземпляр, приводящий ключи и значения к String
и Serializable
соответственно или
универсальный метод, подобный следующему, который выполняет типобезопасность безопасно.
@SuppressWarnings("unchecked")
public <K,V> Map<K,V> castMap(Map<?, ?> map, Class<K> kClass, Class<V> vClass) {
for (Map.Entry<?, ?> entry : map.entrySet()) {
kClass.cast(entry.getKey());
vClass.cast(entry.getValue());
}
return (Map<K,V>) map;
}