Сериализация, компиляция и генерация байт-кода - PullRequest
1 голос
/ 10 января 2011

У меня следующая иерархия классов

  ParentInterface

        |
        v
    ParentClass

       /    \ 
      v      v 

  SubClass1   SubClass2

Интерфейс не расширяет интерфейс Serializable, и ни один из классов не реализует интерфейс Serializable.Все классы были скомпилированы и упакованы в jar-файл.

Теперь я изменяю ParentInterface, чтобы он расширял интерфейс Serializable.После этого я заменяю только файл ParentInterface.class в банке.

У меня есть код, в котором я пытаюсь сериализовать экземпляр SubClass1 и SubClass2.При попытке сериализации я получаю NotSerializableException.

Полагаю, если бы я снова скомпилировал все классы и заменил их в банке, это сработало бы.Что не так, если я заменю только ParentInterface?

Ответы [ 2 ]

1 голос
/ 10 января 2011

Это может помочь ..

SubClass1 и SubClass2 по определению будут сериализуемыми

Однако, в соответствии с рекомендациями, обратите особое внимание на поля, содержащиеся в SubClass1 и SubClass2 .Обратите внимание на приведенное ниже ограничение, описанное в JDK.

Во время десериализации поля несериализуемых классов будут инициализированы с использованием открытого или защищенного конструктора no-arg этого класса.Конструктор без аргументов должен быть доступен для подкласса, который сериализуем.Поля сериализуемых подклассов будут восстановлены из потока.

Обязательно сделайте «несериализуемые» поля как переходные или действуйте соответствующим образом.

1 голос
/ 10 января 2011

Все подтипы сериализуемого класса сами по себе сериализуемы.

В соответствии с JavaDoc, SubClass1 и SubClass2 должны быть сериализуемыми .. если только у них нет некоторых полей которые не сериализуемы.

Дважды проверьте сериализуемость полей внутри SubClass1 и SubClass2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...