Тип serialVersionUID
должен быть long
, так как он был указан. См. http://docs.oracle.com/javase/8/docs/platform/serialization/spec/class.html (в частности, раздел 4.6).
Причина, по которой UID составляет 64 бита, заключается в том, что риск случайного столкновения с UID будет слишком высоким, если (скажем) были использованы 32-битные значения.
Схема генерации UID по умолчанию для серийной версии создает хэш на основе методов и полей классов. Существует небольшое, но отличное от нуля, что два разных класса будут иметь одинаковый UID по умолчанию. Если это произойдет, десериализатор может не заметить, что сериализованная форма объекта несовместима с slass, который мы пытаемся десериализовать. Тогда произойдут плохие вещи.
Если были использованы 32-битные UID, вероятность того, что два несовместимых класса имеют одинаковый UID, будет одним из 2 . Это примерно один шанс в 4 миллиарда. Это слишком большой шанс. С 64-битными значениями UID изменение равно одному из 2 . Это примерно один шанс в 16 квадриллионов. Это считалось (дизайнерами) приемлемой малой вероятностью.
Возможный дубликат [Что такое serialVersionUID и зачем его использовать?] (Http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use- это) – Akshay
В нем не указано, почему мы должны иметь большое значение. – javadev