不可序列化 Java

Not Serializable Java

我不明白为什么我的 class 不可序列化。正如您在下面的代码中看到的,我的 class 实现了 Serializable 接口。

public class Firm {

PrintWriter out = new PrintWriter(System.out, true);
Scanner sc = new Scanner(System.in);

Set<Worker> workers = new HashSet<>();

boolean saveToFile(){
    String fileName = "text.txt";
    ObjectOutputStream file;
    boolean save = false;
    try{
        file = new ObjectOutputStream(new FileOutputStream(fileName));
        file.writeObject(workers);
        file.close();
        save = true;
    }catch(IOException e){
        e.printStackTrace();
    }
    return save;
}
}

import java.io.Serializable;

public abstract class Worker implements Serializable {//Code

有什么解决办法吗?

问题是 PrintWriterScanner 不可序列化;你不能像那样序列化 I/O 连接。

如果您需要它们,请将它们作为局部变量移动到您使用它们的任何地方。不要将它们存储在 class.

你应该放心 Worker class 中的所有字段也有实现 Serializable 接口的类型。

根据您评论中的 class 名称和堆栈跟踪片段,很可能您在 Worker class 中有类型为 Firm 的字段,该字段不可序列化由于其结构。

所以,你必须至少做两件事:

1) Firm class 还必须实现 Serializable 接口

2) 将 Scanner 字段标记为 transient