Java中匿名类的序列化

是否可以在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以及时运行它们。

有可能,危险。 匿名类的名称/数量由编译器生成,并基于它们在文件中出现的顺序。 例如,如果你交换两个类的顺序,他们的名字也将交换。 (类按名称反序列化)

请注意,除了实现Serializable的Task之外,外部类还必须是Serializable。 您最终可能会序列化不必要的成员状态。

这当然是可能的。 Java为匿名类生成内部名称(类似于DeclaredInThisClass $ 1,如果在名为DeclaredInThisClass的类中声明它们,则为DeclaredInThisClass $ 2)并且将很乐意序列化/反序列化它们。

当然! 在您的案例类中,Task应该实现Serializable接口。