如何删除SuppressWarnings(“未选中”)

时间:2010-07-09 08:11:23

标签: java generics

我有什么方法可以更改此代码,以便我可以删除未经检查的警告

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);

2 个答案:

答案 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,因此编译器不知道ObjectArrayList<String>,所以它警告你会出现问题如果Object不是ArrayList<String>

你可以解除ArrayList的参数化,这样就可以接受List的任何内容(因此不需要转换,从而删除未经检查的转换的警告),但是你会得到另一个原始类型的警告