我不知道如何将Object
转换为ArrayList<Account>
,就像我执行的序列化一样,它的类型为ArrayList<Accounts>
。我认为这个代码应该可行。
当前反序列化代码:
ArrayList<Accounts> alst = new ArrayList<Accounts>();
try {
ObjectInputStream ain = new ObjectInputStream(new BufferedInputStream(new FileInputStream("accounts.ser")));
Object o = ain.readObject();
if(o instanceof ArrayList) {
alst = (ArrayList<Accounts>) o;
}
else {
System.out.println("Big problem!!!");
}
ain.close();
}
我遇到了问题:
warning:
[unchecked] unchecked cast
required: ArrayList<Account>.
found: Object
我已经阅读了很多有关此问题的帖子,但我无法解决这个问题。我一直在坚持这个问题几天,没有运气!我知道这是我正在对文件进行反序列化的问题。如何从Object中将其恢复为以前的类型?
还有别的办法吗?
答案 0 :(得分:3)
您的问题不是向下转移到ArrayList
,而是向ArrayList<Account>
转发。
如果没有未选中的强制转换警告,则无法向下转换为通用类型。这是由于Java Generics的核心特性:在运行时,没有与实例关联的类型参数信息。您将不得不接受警告,或使用方法或表达式上的SuppressWarnings("Unchecked")
注释来禁止警告。
另外,你似乎对演员与转换感到困惑: downcast (你正在那里做的事情)不会转换任何东西,它只是允许对象被视为好像它是你投入的类型。您的对象已经是ArrayList
类型;您的变量的类型为Object
。请学习如何理解Java中的这些差异,它们对于理解和编写代码至关重要。
答案 1 :(得分:1)
我认为要避免警告你可以做以下事情:
alst = (ArrayList) o;
for (Object item : alst) {
if (!item instanceof Account) {
throw new IllegalArgumentException();
}
}