Java[未选中]未选中案例警告
好吧,我一直在四处寻找,做了很多谷歌搜索,但我仍然找不到一个方法来避免这个警告Java[未选中]未选中案例警告,java,uncaught-exception,Java,Uncaught Exception,好吧,我一直在四处寻找,做了很多谷歌搜索,但我仍然找不到一个方法来避免这个警告 Integer result = chooser.showOpenDialog(null); if (result.equals(0)) { String tempHolder = chooser.getSelectedFile().getPath(); filenameLoad = new File(tempHolder); filenameSave = filenameLoad;
Integer result = chooser.showOpenDialog(null);
if (result.equals(0))
{
String tempHolder = chooser.getSelectedFile().getPath();
filenameLoad = new File(tempHolder);
filenameSave = filenameLoad;
FileInputStream fis = null;
ObjectInputStream in = null;
try
{
fis = new FileInputStream(filenameLoad);
in = new ObjectInputStream(fis);;
}
catch(IOException ex)
{
ex.printStackTrace();
}
try
{
loadFile = (ArrayList<Dot>)in.readObject();
}
catch(IOException ex)
{
System.out.println("Cast fail");
}
catch(ClassNotFoundException ex)
{
System.out.println("Cast fail");
}
catch (ClassCastException ex)
{
System.out.println("Cast fail");
}
try
{
in.close();
}
catch(Exception ex)
{
System.out.println("failed to close in");
}
save.setEnabled(true);
gpanel.setDotList(loadFile);
}
Integer result=chooser.showOpenDialog(null);
if(结果等于(0))
{
字符串tempHolder=chooser.getSelectedFile().getPath();
filenameLoad=新文件(临时持有者);
filenameSave=filenameLoad;
FileInputStream fis=null;
ObjectInputStream in=null;
尝试
{
fis=新的FileInputStream(filenameLoad);
in=新对象输入流(fis);;
}
捕获(IOEX异常)
{
例如printStackTrace();
}
尝试
{
.readObject()中的loadFile=(ArrayList);
}
捕获(IOEX异常)
{
系统输出打印项次(“转换失败”);
}
捕获(ClassNotFoundException ex)
{
系统输出打印项次(“转换失败”);
}
捕获(ClassCastException例外)
{
系统输出打印项次(“转换失败”);
}
尝试
{
in.close();
}
捕获(例外情况除外)
{
System.out.println(“关闭失败”);
}
save.setEnabled(true);
gpanel.setDotList(加载文件);
}
它在.readObject()中的loadFile=(ArrayList)行给出警告;我已经加入了捕猎,所以我不知道为什么它仍然说它没有捕猎。有什么帮助吗?谢谢?它不是“未锁定”,而是“未锁定”。JVM无法在运行时(即转换完成时)判断ArrayList是否真的包含点元素
无论何时从原始类型强制转换为泛型类型,都会出现此警告。如果确定强制转换正常,则可以使用注释抑制警告
@SuppressWarnings("unchecked")
为此,最好将强制转换封装在一个小的、单独的方法中。这意味着编译器无法检查读入的对象是否与强制转换到的类型匹配。因此,未经检查的警告
顺便说一句:您可能希望改进错误处理,使其更简单、更清晰 您看到的是一个编译器警告,您试图将一个对象转换为
数组列表
,而没有首先检查该对象是否确实包含一个点列表,而不是一个Foo列表。它没有说uncatched
(正确拼写为uncaught
),而是说unchecked
。强制转换为泛型类型时无法避免此警告,只能抑制它。或者你也可以解决这个问题:
@SuppressWarnings("unchecked")
public static <T> T castToAnything(Object obj) {
return (T) obj;
}
您没有检查
in.readObject();
这真是一个
ArrayList<Dot>
ArrayList
使用
ArrayList点列表=null;
Object obj=in.readObject();
if(数组列表的obj实例)
{
dotList=(ArrayList)obj;
}
loadFile的声明是什么?警告的文本是什么?嘿,谢谢,我在程序中使用了这个,不再给我那个警告了,非常感谢!是的,我四天前才知道异常,所以当我收到那个警告时,我想这意味着我需要捕捉异常,所以我就用所有的东西来点击它。@marblecatdog,现在听起来不错。您可能会发现,在所有代码中没有少量捕获更好。改用ArrayList表单,因为更多的泛型类型信息将在运行时被删除。
ArrayList<Dot>
ArrayList<Dot> dotList = null;
Object obj = in.readObject();
if (obj instanceof ArrayList<Dot>)
{
dotList = (ArrayList<Dot>) obj;
}