Должен ли я учитывать проблемы сериализации при разработке абстрактных классов? - PullRequest
3 голосов
/ 24 ноября 2011

Обычно этот вопрос возникает из Eclipse, предлагающего добавить UID последовательной версии в абстрактный класс.

Поскольку класс является абстрактным, экземпляры этого класса никогда не будут существовать, поэтому они никогда не будут сериализованы (только производные классыбыть).

Так что мой вопрос: можно ли поместить @SuppressWarnings("serial") в абстрактный класс, чьи расширители будут сериализованы (и они будут иметь serialVersionUID)?

Также любые другие вопросы,осторожны при разработке абстрактного класса, чьи расширители будут сериализованы, приветствуются.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 ноября 2011

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

Если вы решите реализовать интерфейс Serializable, вам понадобится серийная версия uid для абстрактного класса, в противном случае сериализованные формы расширяющихся классов прекратятся, когда выйдет новая версия абстрактного класса.

3 голосов
/ 24 ноября 2011

Каждый сериализуемый класс нуждается в serialVersionUID. Если объект относится к типу среды выполнения, который сам расширяет сериализуемый класс, то в этом участвуют два serialVersionUID. Так что да, вам это нужно, если только вы не решите не поддерживать сериализацию между версиями (например, Swing).

...