Java: должны ли сериализуемые внутренние и анонимные классы иметь SerialVersionUID?
Хотя в настоящее время я не планирую сериализовать что-либо, я даю всем сериализуемым внешним классам, а также статическим вложенным классам SerialVersionUID
потому что это правильный способ сделать это.
Тем не менее, я прочитал здесь, что
Сериализация внутренних классов (то есть вложенных классов, которые не являются статическими классами-членами), включая локальные и анонимные классы, настоятельно не рекомендуется по нескольким причинам....
Итак, мой вопрос:
Должен ли я дать внутренние и анонимные классы SerialVersionUID
каждый, или я должен добавить @SuppressWarnings("serial")
к тем?
Один способ более правильный, чем другой?
В любом случае я сделаю ссылки на такие классы временными, потому что я не хочу, чтобы они были сериализованы.
1 ответ
Дайте им serialVersionUID, потому что:
- Это хорошая общая практика, и, конечно, это не помешает.
- Предупреждения должны быть устранены, а не подавлены.
- Иногда внутренние классы изменяются на классы верхнего уровня, когда они становятся достаточно большими.
Хорошо (по всем причинам, указанным в документации, на которую вы ссылаетесь), что вы не будете сериализовать экземпляры этих внутренних классов. Я полагаю, если вы были параноиком или волновались, что другие разработчики могут не придерживаться того же здравого смысла, вы могли бы реализовать этот выбор, имея writeObject
метод в каждом внутреннем классе, который безоговорочно генерирует исключение.