Что такое serialVersionUID в java, обычно в классе исключений?
Возможный дубликат:
Почему я должен беспокоиться о serialVersionUID?
Я просматриваю код обработки исключений, и я увидел что-то, называемое serialVersionUID. Что это за uid? Ограничен ли он только исключением или может использоваться во всех классах??? в чем преимущество этого идентификатора?
Ответы
Ответ 1
serialVersionUID - это поле для определения версии определенного класса при сериализации и десериализации. рассмотрите сценарий, в котором у вас есть класс Employee
, который имеет 3 поля, которые были в производстве в течение некоторого времени (что может быть много сериализованные версии объектов-сотрудников), когда вы обновляете класс для включения (скажем, 4-го поля), тогда весь предыдущий класс (который сериализован) не может быть отброшен или десериализован на новый, и вы получите исключение.
чтобы избежать этой проблемы, вы можете использовать поле serialVersionUID
, чтобы сообщить JVM, что новый класс является infact другой версии (путем изменения serialVersionUID).
@Farmor и @Tom Jefferys сказали почти то же самое, но с примером вещи выглядят намного проще.
Ответ 2
Он используется для сериализации, он должен быть объявлен в любом классе, который реализует Serializable
.
Это фактически номер версии, которую JVM может использовать, чтобы проверить, соответствует ли сериализованный класс определению класса, которое вы пытаетесь десериализовать.
Там больше информации о нем: http://download.oracle.com/javase/1,5.0/docs/api/java/io/Serializable.html
Ответ 3
Чтобы определить, имеют ли они сериализуемую и десериализуемую совместимость, если они имеют один и тот же serialVersionUID
и оба реализуют Serializable
, тогда они совместимы.
И это не ограничивается исключениями, поскольку вы заметите, что Eclipse склонен положить serialVersionUID
в начале вашего обычного класса java, если он реализует Serializable
.
Отредактировано: Обновлено, чтобы включить @Spychos правильный комментарий о интерфейсе Serializable
.