警告内容:
Type safety: The cast from Object to ArrayList<String> is actually checking
against the erased type ArrayList除了添加
@SuppressWarnings("unchecked")
以及 Eclipse 的设置外,是否还有其它办法?
Type safety: The cast from Object to ArrayList<String> is actually checking
against the erased type ArrayList除了添加
@SuppressWarnings("unchecked")
以及 Eclipse 的设置外,是否还有其它办法?
@SuppressWarnings("unchecked")
如果你没有那个方法的源代码,那只能是添加@SuppressWarnings("unchecked") 当然你可以在eclipse的Window->Preferences->Java->Compiler->Errors/Warning->Generic types中将Unchecked generic type operation设置为Ignore。你还可以在eclipse的Window->Preferences->Java->Compiler将Compiler compliance level 设置为小于5.0的级别。
除此之外没有其它办法。
HttpSession session = request.getSession(); Object value;
ArrayList<String> formatList = null;
value = session.getAttribute(KEY_FORMAT);
if (value != null){
formatList = (ArrayList<String>)value; // 此行被警告
}
HttpSession session = request.getSession(); Object value;
ArrayList<String> formatList = null;
value = session.getAttribute(KEY_FORMAT);
if (value != null){
formatList = (ArrayList<String>)value; // 此行被警告
}
ArrayList<String> formatList = null;
value = session.getAttribute(KEY_FORMAT);
if ((new ArrayList<String>()).getClass().isInstance(value)){
formatList = (ArrayList<String>)value;
}
ArrayList<String> formatList = null;
value = session.getAttribute(KEY_FORMAT);
if (value != null){
formatList = (ArrayList<String>)value; // 此行被警告
}红色部分多余,你不觉得吗,是null付给formatList也没什么啊,本来他就是null;
改成:
ArrayList<String> formatList = (ArrayList<String>)session.getAttribute(KEY_FORMAT);
确实,如果是 Object 的话,可以不用判断. 回想一下,写出这样的代码,可能是因为原生数据类型的话,如果是 null 值,转换会出异常,于是为了避免出错,一古脑全给加了判断.谢谢,我这就精简代码去,呵呵.但是那个警告,还是有点麻烦,不知道该不该还抱着那份希望.
也不会报错啊,只在你要在使用之前作一下判断(而这是必须的)。
再者,警告就警告吧,有时编译器也不一定就是对的,你能给session加上泛型吗??不好吧
想不起来了,好象是将什么类型转换为 int 时出错吧,刚才试了半天,也找不回以前出错的情况了.
:(
int a=(int)null;编译是一定通不过的,因为你能把null付给一个对象类型 String s=null,但不能付给基本数据类型(int a=null是不行的)
如果你想屏蔽这种检查,可采取如下的方法
1.用JDK1.5以前的版本
2.或着用@SuppressWarnings("unchecked")
3.如果是在Eclipse下开发的话,还可以更改Eclipse的编译属性,在 windows-设定-java-compile-错误和警告 里面有不检查泛型 这个选项。改成无视就行了
也就是传说中的装箱和拆箱操作。package com.sytdc.cxl;import java.util.ArrayList;public class ZhenZeTest { /**
* @param args
*/
public static void main(String[] args) {
ArrayList<String> ar = new ArrayList<String>();
ar.add("001");
ar.add("003");
ar.add("002");
ar.add("004");
for(String o:ar){
System.out.println("000 == "+ o);
}
ArrayList<Integer> ar2 = new ArrayList<Integer>();
ar2.add(001);
ar2.add(003);
ar2.add(002);
ar2.add(004);
for(Integer o:ar2){
System.out.println("000 ==2 "+ o);
}
}}
在往session里存数据时,对几个泛型对象,做个包装就可以了,但是多了一个包装类,如果有现成的包装类就更好了.
示例代码: private final String SESSION_KEY = "JN050_SESSION"; private void saveToSession(HttpServletRequest request, JN050ActionForm form){
HttpSession session = request.getSession(); JN050ActionForm sessionForm = new JN050ActionForm();
sessionForm.setCsvFileFormatList(form.getCsvFileFormatList());
sessionForm.setErrorMessages(form.getErrorMessages());
sessionForm.setFullList(form.getFullList());
sessionForm.setPageList(form.getPageList());
sessionForm.setRootCodeMap(form.getRootCodeMap()); session.setAttribute(SESSION_KEY, sessionForm);
} private void restoreFromSession(HttpServletRequest request, JN050ActionForm form){
HttpSession session = request.getSession(); JN050ActionForm sessionForm = (JN050ActionForm)session.getAttribute(SESSION_KEY);
form.setCsvFileFormatList(sessionForm.getCsvFileFormatList());
form.setErrorMessages(sessionForm.getErrorMessages());
form.setFullList(sessionForm.getFullList());
form.setPageList(sessionForm.getPageList());
form.setRootCodeMap(sessionForm.getRootCodeMap());
}
注意是1.5以上的版本中