0

我不知道如何将 转换ObjectArrayList<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 中将其恢复为以前的类型?

还有其他方法吗?

4

2 回答 2

3

你的烦恼不是落入ArrayList,而是落入ArrayList<Account>

如果没有未经检查的强制转换警告,您不能向下转换为泛型类型。这是由于 Java 泛型的核心特性:在运行时没有与实例关联的类型参数信息。您将不得不忍受警告,或者使用SuppressWarnings("Unchecked")方法或表达式上的注释来抑制它。

此外,您似乎对转换与转换感到困惑:向下转换(这就是您在那里所做的)不会转换任何东西,它只是允许将对象视为您将其转换为的类型。您的对象已经是类型ArrayList;你的变量是类型Object。请学会欣赏 Java 中的这些差异,它们对于理解和编写代码至关重要。

于 2013-05-27T10:11:04.743 回答
1

我认为为避免警告,您可以执行以下操作:

  alst = (ArrayList) o;
  for (Object item : alst) {
    if (!item instanceof Account) {
      throw new IllegalArgumentException();
    }
  }
于 2013-05-27T10:10:00.217 回答