ObjectInputStream中未经检查或不安全的操作

时间:2016-05-14 19:40:56

标签: java compiler-warnings objectinputstream

我正在进行"未经检查或不安全的操作"此方法出错:

public static MyClass initApp(){
        MyClass obj = new MyClass(); 
        try{
            ObjectInputStream oin = 
                new ObjectInputStream(new FileInputStream("file.dat"));

            obj.setSomeList ( (Map<String,MyOtherClass>) oin.readObject()); //error line

        }catch(IOException e)
            { System.out.println(e.getMessage()); }
         catch(ClassNotFoundException e)
            { System.out.println(e.getMessage()); }

        return obj; 
    }

在这种情况下,不是映射最抽象的吗?我怎么解决这个问题?

方法setSomeList(注意!它放在另一个类中!如果有帮助的话):

public void setSomeList(Map<String,MyOtherClass> l){
        for(Map.Entry<String,MyOtherClass> entrada : l.entrySet())
            someList.put(entrada.getKey(),entrada.getValue().clone());
    }

2 个答案:

答案 0 :(得分:1)

您应该在投射前检查对象类型。

Object theObject = obj.readObject();
if (theObject instanceof Map)
{
    Map theMap = (Map) theObject;
    objSetSomeList(theMap);
}

答案 1 :(得分:0)

这只是一个警告,您可以简单地忽略它,因为它不会阻止您的应用程序工作,除非它不是正确的类型,如果您想删除它只需在方法定义级别添加@SuppressWarnings("unchecked") ,如下所示:

@SuppressWarnings("unchecked")
public static MyClass initApp(){