Существует ли стандартный закрывающий интерфейс, который можно сериализировать? - PullRequest
1 голос
/ 26 марта 2009

Если нет, возможно, вы могли бы сказать мне, почему.

Я получаю NotSerializableException при сериализации моего класса.

Внутри класса я передаю этот анонимный класс методу:

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

Вопрос до сих пор без ответа. Я хочу знать, существует ли стандартный интерфейс Closure, который реализует Serializable

Ответы [ 3 ]

2 голосов
/ 26 марта 2009

Ваша главная проблема в том, что вложенные классы не имеют стандартизированной последовательной формы. Также обратите внимание, что если вы находитесь в методе экземпляра, объекты внешнего класса также будут сериализованы (через поле с неопределенным именем).

Если вас не волнует, перестает ли ваш код работать в совершенно случайной точке, вы можете вместо этого рассмотреть простой локальный класс (или в дополнение к нему) и анонимный внутренний класс.

2 голосов
/ 26 марта 2009

Все ссылки в вашем классе также должны иметь тип 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() {
            ...
        });
        ...

Редактировать, уточнения. :)

0 голосов
/ 31 мая 2009

Есть ли стандартный интерфейс закрытия что сериализуемо?

Наверное, нет.

...