我无法弄清楚为什么我的班级不可序列化。正如您在我的代码中看到的,我的类实现了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
任何想法如何解决?
答案 0 :(得分:2)
问题是PrintWriter
和Scanner
不可序列化;你不能像这样序列化I / O连接。
将它们移动到您使用它们的任何地方(如果您需要它们)作为局部变量。不要把它们存放在课堂上。
答案 1 :(得分:0)
您应该放心,Worker
类中的所有字段也都具有实现Serializable
接口的类型。
根据您的评论中的类名和stacktrace片段,很可能您的Firm
类中的类型为Worker
的字段由于其结构而无法序列化。
所以,你必须至少做两件事:
1)Firm
类还必须实现Serializable
接口
2)将Scanner
字段标记为transient