Чтобы сделать поле класса, основанного на значениях, непереходным, класс, основанный на значениях, должен быть сериализуемым. Так что на самом деле это дизайнерское решение, принятое не вами.
Если разработчик объявляет класс на основе значений и реализует Serializable
, он предполагает, что классы на основе значений и сериализация совместимы и останутся таковыми.
Мы не знаем, как будет выглядеть окончательная реализация типа значения, но путь миграции, предложенный разработчиками JRE, например. при введении неизменяемых списков, основанных на значениях и сериализуемых, следует использовать, а не предполагать наличие дополнительных правил и ограничений, выходящих за рамки спецификации.
В конце концов, нет причин предполагать, что сериализация не будет работать с типами значений. Он также поддерживает примитивные значения и был адаптирован в прошлом, например. когда была добавлена поддержка enum
. Неясно, будет ли он всегда сохранять значения тогда, или по-прежнему поддерживать обратные ссылки, как с обычными объектами, или выполнять совершенно другую канонизацию, но пока вы не полагаетесь на идентификатор объекта, как это было в вашей предпосылке, вы находитесь на безопасная сторона, так как любая стратегия будет работать с вашим кодом.
person
Holger
schedule
21.12.2017