是否可以在Java中对匿名类进行searialize / desearialize?
示例:
ByteArrayOutputStream operationByteArrayStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(operationByteArrayStream);
oos.writeObject(new Task() {
public void execute() {
System.out.println("Do some custom task"));
}
});
我的问题是我想做一些自定义管理任务,这样我就不需要每个任务都有一个版本。所以我正在尝试做的是 - 通过Groovy脚本引擎通过HTTP端点发布自定义任务并将它们序列化为db以及时运行它们。
答案 0 :(得分:7)
请注意,除了Task实现Serializable之外,外部类还必须是Serializable。您最终可能会序列化不必要的成员状态。
答案 1 :(得分:6)
危险可能。匿名类的名称/数量由编译器生成,并基于它们在文件中出现的顺序。例如如果你交换两个类的顺序,他们的名字也将交换。 (类按名称反序列化)
答案 2 :(得分:0)
这当然是可能的。 Java为匿名类生成一个内部名称(类似于DeclaredInThisClass $ 1,如果在名为DeclaredInThisClass的类中声明它们,则为DeclaredInThisClass $ 2)并且很乐意序列化/反序列化它们。
答案 3 :(得分:0)
当然!在您的案例类中,Task应该实现Serializable接口。