Является ли реализация java.io.Serializable даже в простых классах Java POJO лучшей практикой? - PullRequest
6 голосов
/ 20 октября 2008

В целом, рекомендуется ли простым Java-классам POJO реализовывать java.io.Serializable?

Ответы [ 4 ]

13 голосов
/ 20 октября 2008

Обычно нет. Джошуа Блох говорит разумно реализовать Сериализуемый . Краткое описание недостатков, которые он описывает:

  • снижает гибкость изменения реализации класса позже - сериализованная форма является частью API класса
  • делает некоторые ошибки и дыры в безопасности более вероятными - злоумышленник может получить доступ к внутренним объектам класса в сериализованном потоке байтов
  • увеличивает нагрузку на тестирование - теперь вам нужно тестировать сериализацию!
  • обременяет авторов подклассов - они должны сделать свои подклассы тоже сериализуемыми

Конечно, иногда вам нужен POJO для реализации Serializable, скажем, для RMI, но если в этом нет необходимости, ваш код будет проще и безопаснее без него.

4 голосов
/ 20 октября 2008

Только если вам нужно иметь возможность их сериализовать. Это не стоит усилий в противном случае.

3 голосов
/ 20 октября 2008

Это зависит больше от потребностей. В контексте веб-приложений некоторые веб-серверы (например, Tomcat 6) даже делают обязательным сериализацию классов, объекты которых мы храним в сессиях.

0 голосов
/ 20 октября 2008

Одна вещь, которую я сделал, чтобы учесть тот факт, что сериализованная форма не является обратно совместимой (скажем, при динамической перезагрузке класса в работающей системе), это загрузить поля, которые я хочу сохранить, в хэш-карту, а затем сериализовать это. Таким образом, я всегда могу десериализовать данные, даже если пропущены поля. Возможно, вам придется указать значения по умолчанию для отсутствующих ключей, но это лучше, чем испортить порядок полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...