2014-01-09 7 views
0

Я могу сохранить объекты только в DB, ​​если implements Serializable, даже если я не добавлю private static final long serialVersionUID = 1L; или тому подобное.Объекты домена с serialVersionID?

Вопрос: Обязательно ли установить этот идентификатор serialID? Каковы недостатки, если я этого не сделаю?

ответ

1
First what is SerialVersionUID and is it mandatory? 

serialVersionUID используется как элемент управления версиями в классе Serializable. Если вы явно не объявляете serialVersionUID, JVM сделает это за вас автоматически, основываясь на различных аспектах вашего класса Serializable, как описано в Java(TM) Object Serialization Specification.

Drawbacks if I dont? 

вычисление serialVersionUID по умолчанию является очень чувствительным к деталям класса и может варьироваться в зависимости от различной реализации виртуальной машины Java, и привести к неожиданным InvalidClassExceptions во время процесса десериализации.

Так, чтобы избежать этого, лучше указать serialVersionUID для вашей сериализации и десериализации процесса

0

Я думаю, что это не обязательно. Eclipse показывает то же предупреждение, когда я создаю класс, который расширяет JFrame. Я всегда добавляю @SuppressWarnings("serial").

+0

Вы могли бы также отключить это предупреждение полностью в настройках рабочего пространства, то:/Я бы просто позволить Eclipse, генерировать serialVersionUID по умолчанию в вместо добавления аннотации. – Gimby

2

Чтобы сделать объект сериализуемым, вам не нужен serialVersionUID. Это необходимо только тогда, когда вам нужно читать объекты, сериализованные с использованием старой версии класса, или поддерживать формат сериализации при внесении некоторых незначительных изменений (например, упорядочение полей).

Я написал blog post (по-французски извините, но google translate может помочь) об этом.

Смежные вопросы