在 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();
}
我是否可以获得一些有关显示此错误的信息,以及一些帮助您使用反序列化代码而不会出现错误。
答案 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)。