我有什么方法可以更改此代码,以便我可以删除未经检查的警告
ArrayList<String> keys = new ArrayList<String>();
// do some stuff then
// save keys in session
HttpServletRequest request = getThreadLocalRequest();
HttpSession session = request.getSession(true);
session.setAttribute(uuid, keys);
// get keys from session sometime later
@SuppressWarnings("unchecked")
ArrayList<String> keys = (ArrayList<String>) session.getAttribute(uuid);
答案 0 :(得分:7)
你做不到。 session.getAttribute()
类型不安全。
您可以创建一个包装器方法,以便只在一个位置放置@SuppressWarnings
:
public final class SessionUtils {
@SuppressWarnings("unchecked")
public static <T> T getSessionAttribute(HttpSession session, String name) {
return (T) session.getAttribute(name);
}
}
然后你可以在没有警告的情况下使用:
List<String> keys = SessionUtils.getAttribute(session, uuid);
答案 1 :(得分:2)
嗯,你必须在:
之间做出选择问题是getAttribute()
返回Object
,因此编译器不知道Object
是ArrayList<String>
,所以它警告你会出现问题如果Object
不是ArrayList<String>
。
你可以解除ArrayList
的参数化,这样就可以接受List
的任何内容(因此不需要转换,从而删除未经检查的转换的警告),但是你会得到另一个原始类型的警告