不可序列化 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
有什么解决办法吗?
问题是 PrintWriter
和 Scanner
不可序列化;你不能像那样序列化 I/O 连接。
如果您需要它们,请将它们作为局部变量移动到您使用它们的任何地方。不要将它们存储在 class.
你应该放心 Worker
class 中的所有字段也有实现 Serializable
接口的类型。
根据您评论中的 class 名称和堆栈跟踪片段,很可能您在 Worker
class 中有类型为 Firm
的字段,该字段不可序列化由于其结构。
所以,你必须至少做两件事:
1) Firm
class 还必须实现 Serializable
接口
2) 将 Scanner
字段标记为 transient
我不明白为什么我的 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
有什么解决办法吗?
问题是 PrintWriter
和 Scanner
不可序列化;你不能像那样序列化 I/O 连接。
如果您需要它们,请将它们作为局部变量移动到您使用它们的任何地方。不要将它们存储在 class.
你应该放心 Worker
class 中的所有字段也有实现 Serializable
接口的类型。
根据您评论中的 class 名称和堆栈跟踪片段,很可能您在 Worker
class 中有类型为 Firm
的字段,该字段不可序列化由于其结构。
所以,你必须至少做两件事:
1) Firm
class 还必须实现 Serializable
接口
2) 将 Scanner
字段标记为 transient