我不知道如何转换 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 恢复到原来的类型?
还有别的办法吗?
最佳答案
你的麻烦不是降格为ArrayList
,但进入 ArrayList<Account>
.
如果没有未经检查的强制转换警告,则无法向下强制转换为泛型类型。这是由于 Java 泛型的核心本质:在运行时没有与实例关联的类型参数信息。您将不得不接受该警告,或者使用 SuppressWarnings("Unchecked")
抑制它。方法或表达式上的注释。
此外,您似乎对强制转换与转换感到困惑:向下转换(这就是您在那里所做的)不会转换任何内容,它只是允许将对象视为它是你将其转换到的类型。您的对象已经属于 ArrayList
类型;您的变量的类型为 Object
。请学会欣赏 Java 中的这些差异,它们对于理解和编写代码至关重要。
关于java - 不安全的强制转换问题,如何强制类型安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16770760/