Java [unchecked]未检查的大小写警告

| 好的,我一直在环顾四周,并完成了很多Google搜索,但是我仍然找不到避免这种警告的方法。
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);
  }
它在行loadFile =(ArrayList)in.readObject();中给我警告。我已经添加了渔获量,所以我不确定为什么它仍然说未捕获。有什么帮助吗?谢谢?     
已邀请:
它不是\“ unatched \”,而是\“ unchecked \”。 JVM无法在运行时(即完成转换时)判断ArrayList是否确实包含Dot元素。 从原始类型转换为泛型时,都会发生此警告。如果确定转换正确,则可以通过注释取消警告
@SuppressWarnings(\"unchecked\")
为此,最好用小的单独方法封装演员表。     
您没有检查是否由返回的对象
in.readObject();
真的是
ArrayList<Dot>
使用
ArrayList<Dot> dotList = null;
Object obj = in.readObject();
if (obj instanceof ArrayList<Dot>)
{
dotList = (ArrayList<Dot>) obj;
}
    
它不是说
uncatched
(正确拼写为
uncaught
),而是say7ѭ。强制转换为泛型类型时,您无法避免此警告,只能禁止它。或者您可以解决它:
@SuppressWarnings(\"unchecked\")
public static <T> T castToAnything(Object obj) {
  return (T) obj;
}
使用此方法,您可以编写:
loadFile = castToAnything(in.readObject());
    
这意味着编译器无法检查您读入的对象是否与您要投射的对象类型匹配。因此,未经检查的警告。 顺便说一句:您可能想对错误进行处理,以使其更简单明了。 ;)     
您看到的是一个编译器警告,您试图将对象转换为
ArrayList<Dot>
,而不先检查该对象是否实际包含一个点列表而不是例如Foo列表。     

要回复问题请先登录注册