Java 如何删除SuppressWarning(“未选中”)
是否有任何方法可以更改此代码,以便删除未检查的警告Java 如何删除SuppressWarning(“未选中”),java,generics,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.setAtt
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);
ArrayList keys=new ArrayList();
//那就做点什么吧
//在会话中保存密钥
HttpServletRequest=getThreadLocalRequest();
HttpSession session=request.getSession(true);
session.setAttribute(uuid,key);
//稍后从会话获取密钥
@抑制警告(“未选中”)
ArrayList keys=(ArrayList)session.getAttribute(uuid);
好吧,你必须在以下两者之间进行选择:
- 原始类型警告
- 未经检查的转换警告
- 注释以删除原始类型的警告
- 注释以删除未选中转换的警告
getAttribute()
返回一个对象
,因此编译器不知道对象
是一个数组列表
,因此它警告您,如果对象
不是数组列表
,就会出现问题
您可以取消参数化
ArrayList
,这样它将接受任何内容的列表(因此不需要转换,从而删除未选中转换的警告),但随后您会得到另一个原始类型的警告。您不能<代码>会话。getAttribute()
的类型不安全
您可以创建一个包装器方法,以便只在一个位置具有@SuppressWarnings
:
public final class SessionUtils {
@SuppressWarnings("unchecked")
public static <T> T getSessionAttribute(HttpSession session, String name) {
return (T) session.getAttribute(name);
}
}
public final class SessionUtils{
@抑制警告(“未选中”)
公共静态T getSessionAttribute(HttpSession会话,字符串名称){
return(T)session.getAttribute(name);
}
}
然后,您可以在没有警告的情况下使用:
List<String> keys = SessionUtils.getAttribute(session, uuid);
List keys=SessionUtils.getAttribute(会话,uuid);
+1以方便使用T参数。我猜这是从指定变量读取的,对吗?