Можно ли сериализовать объекты на основе значений, если приложение никогда не полагается на свою идентичность объекта?


Гидролокатор показывает

Сделайте это поле на основе значений переходным, чтобы оно не включалось в сериализация этого класса.

Это будущая ошибка, когда будет выпущен класс на основе значений.

Итак, если приложение никогда не полагается на свою идентичность объекта, могу ли я сделать объекты на основе значений непостоянными?

1 5

1 ответ:

Чтобы сделать поле класса, основанного на значении, непереходным, класс, основанный на значении, должен быть сериализуемым. Так что это на самом деле дизайнерское решение, принятое не вами.

Если конструктор объявляет класс основанным на значении и реализует Serializable, они предполагают, что классы на основе значения и сериализация совместимы и останутся таковыми.

Мы не знаем, как будет выглядеть реализация конечного типа значения, но путь миграции, предложенный разработчиками JRE, например, при введении неизменяемые списки, основанные на значениях и сериализуемые , следует принимать, а не предполагать, что существуют дополнительные правила и ограничения за пределами спецификации.

В конце концов, нет никаких оснований предполагать, что сериализация не будет работать с типами значений. Он также поддерживает примитивные значения и был адаптирован в прошлом, например, когда была добавлена поддержка enum. Неясно будет ли он всегда хранить значения тогда или все еще поддерживать обратные ссылки как с обычными объектами или выполните совершенно другую канонизацию, но до тех пор, пока вы не полагаетесь на идентичность объекта, как это было вашей предпосылкой, вы находитесь на безопасной стороне, поскольку любая стратегия будет работать с вашим кодом.