[英]Unsafe cast issue, How to cast typesafe?
我没有看到如何将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中的这些差异,它们对于理解和编写代码至关重要。
我认为为了避免警告,您可以执行以下操作:
alst = (ArrayList) o;
for (Object item : alst) {
if (!item instanceof Account) {
throw new IllegalArgumentException();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.