/ / SerialVersionUID з “private static final long” все ще отримує InvalidClassException - Java, серіалізація

SerialVersionUID з "приватним статичним кінцевим довгим" все ще отримує InvalidClassException - java, серіалізація

Я зібрав та розібрав різні проекти в моїй програмі Java, автоматично генеруючи serialVersionUID через Eclipse для всіх моїх класів, похідних від Serializable.

Я прочитав відповіді на це питаннята підтвердив, що serialVersionUids - це всі private static final long.

Тим не менше, я отримую таку помилку, коли намагаюся запустити:

java.io.InvalidClassException: com.acme.product.Widget; місцевий клас несумісний: потік classdesc serialVersionUID = 5226096973188250357, локальний клас serialVersionUID = -5432967318654384362

Що мені не вистачає?

Відповіді:

1 для відповіді № 1

У вас, ймовірно, є проблема із шляху до класу, коли ваша програма вирішує стару несумісну версію класу, яка має інше значення для serialVersionUID.

Або серіалізований об’єкт, який завантажується, був серіалізований за допомогою однієї версії класу, яка зараз недоступна.


1 для відповіді № 2

Якщо клас змінився після того, як ви його серіалізували, зміна може бути несумісною. Серіалізація не може її десериалізувати, навіть із включеним serialVersionUID.

Якщо у вас є клас, як це було під час серіалізації (наприклад, із SCM), спробуйте повернутися назад до цього, відновити serialVersionUID і повторити.

Якщо ви внесли несумісні зміни, вам доведеться реалізувати readObject () / writeObject (), щоб самостійно обробляти деталі серіалізації.


-1 для відповіді № 3

потік classdesc serialVersionUID = 5226096973188250357

Що мені не вистачає?

Вам не вистачає приватного статичного фіналу long serialVersionUID = 5226096973188250357L;

Однак якщо змінений клас більше не сумісний із серіалізацією (див. Специфікацію серіалізації об’єктів), тепер ви можете отримати більше неясних помилок.