是否有可序列化的标准闭包接口?

时间:2009-03-26 09:03:27

标签: java serialization closures

如果没有,也许你可以告诉我原因。

当我的类被序列化时,我得到NotSerializableException。

在课程内部,我将这个匿名类传递给方法:

new org.apache.commons.collections.Closure() {
   ...
};

这个问题仍然没有答案。我想知道是否有一个标准的Closure接口实现了Serializable

3 个答案:

答案 0 :(得分:2)

您的类中的所有引用也必须是Serializable类型,甚至是Closure类型。它是一个界面吗?它必须扩展java.io.Serializable接口。

即:

interface Closure extends java.io.Serializable {
    ...
}

class YourClass implements java.io.Serializable {
    private Closure closure;
    ...
    public void setClosure(Closure closure) {
        this.closure = closure;
    }
}
...
    private static void main(String[] args) {
        YourClass y = new YourClass();
        y.setClosure(new Closure() {
            ...
        });
        ...

编辑,澄清。 :)

答案 1 :(得分:2)

这里的主要问题是嵌套类没有标准化的序列形式。另请注意,如果您在实例方法中,外部类对象也将被序列化(通过具有未指定名称的字段)。

如果您不关心代码是否在完全随机的位置停止工作,您可能需要考虑使用普通的本地类(或者除此之外)和匿名内部类。

答案 2 :(得分:0)

  

是否有标准的闭包界面   那是Serializable?

我猜不是。