Java未经检查或不安全的操作消息

时间:2013-05-13 02:40:41

标签: java serialization deserialization compiler-warnings unchecked-exception

BlueJ 中编译 Java 类时出现以下错误。

AuctionManager.java uses unchecked or unsafe operations.

仅当以下反序列化代码位于我的某个函数中时,才会显示此错误:

try {
  ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
  ArrayList<AuctionItem> AuctionList = (ArrayList<AuctionItem>) in.readObject();
  in.close();
}
catch (Exception e) {
  e.printStackTrace();
}

我是否可以获得一些有关显示此错误的信息,以及一些帮助您使用反序列化代码而不会出现错误。

2 个答案:

答案 0 :(得分:1)

首先,你得到的信息不是错误,是警告;它不会阻止您编程或运行。

至于来源,就是这一行:

ArrayList<AuctionItem> AuctionList = (ArrayList<AuctionItem>) in.readObject();

由于您正在将对象(readObject返回Object)转换为参数化类型(ArrayList<AuctionItem>)。

答案 1 :(得分:1)

user2351151:您可以执行此操作,警告未显示:

ArrayList tempList; // without parameterized type 
try {
  ObjectInputStream in = new ObjectInputStream(new FileInputStream(Filename));
  tempList = (ArrayList) in.readObject();
  for (int i = 0; i < tempList.size(); i++) {
    AuctionList.add(i, (AuctionItem)tempList.get(i)); // explict type conversion from Object to AuctionItem
  }
  in.close();
}
catch (Exception e) {
  e.printStackTrace();
}

您必须使用explict类型转换重写ArrayList(您可以使用不带参数化类型的临时ArrayList)。