Java中匿名类的序列化

时间:2012-02-27 13:15:37

标签: java serialization

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:6)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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