Java: должны ли сериализуемые внутренние и анонимные классы иметь SerialVersionUID?

Хотя в настоящее время я не планирую сериализовать что-либо, я даю всем сериализуемым внешним классам, а также статическим вложенным классам SerialVersionUIDпотому что это правильный способ сделать это.

Тем не менее, я прочитал здесь, что

Сериализация внутренних классов (то есть вложенных классов, которые не являются статическими классами-членами), включая локальные и анонимные классы, настоятельно не рекомендуется по нескольким причинам....

Итак, мой вопрос:

Должен ли я дать внутренние и анонимные классы SerialVersionUID каждый, или я должен добавить @SuppressWarnings("serial") к тем?

Один способ более правильный, чем другой?

В любом случае я сделаю ссылки на такие классы временными, потому что я не хочу, чтобы они были сериализованы.

1 ответ

Решение

Дайте им serialVersionUID, потому что:

  • Это хорошая общая практика, и, конечно, это не помешает.
  • Предупреждения должны быть устранены, а не подавлены.
  • Иногда внутренние классы изменяются на классы верхнего уровня, когда они становятся достаточно большими.

Хорошо (по всем причинам, указанным в документации, на которую вы ссылаетесь), что вы не будете сериализовать экземпляры этих внутренних классов. Я полагаю, если вы были параноиком или волновались, что другие разработчики могут не придерживаться того же здравого смысла, вы могли бы реализовать этот выбор, имея writeObject метод в каждом внутреннем классе, который безоговорочно генерирует исключение.

Другие вопросы по тегам