Это зависит от того, что именно вы спрашиваете. Если вы просто хотите получить значение, отличное от того, которое вы вставили, то да, вы можете сделать это с помощью сериализации. Сериализованные данные полностью отделены от экземпляра A
, который существует в памяти. Когда Java восстанавливает объект из сериализованных данных, она ничего не знает или не заботится об исходном экземпляре A
, который использовался для создания этих данных. Это просто создание структуры данных в памяти на основе схемы, представленной в сериализованной информации.
Так что, если вы хотите изменить то, что вы получите, когда восстанавливаете A
, вы можете сделать это, вручную изменив двоичные сериализованные данные. Для этого потребуется хорошее понимание формата сериализации Java, но это, безусловно, можно сделать.
Хотя, если вы спрашиваете, существует ли какой-либо способ изменить исходный экземпляр A
через сериализацию (например, чтобы каким-то образом получить тот же объект для изменения значения, не создавая новый экземпляр посредством десериализации), то Ответ - нет, вы не можете. Сериализация просто создает снимок текущего состояния объекта. Десериализация создает новый экземпляр объекта, который полностью отделен от исходного экземпляра. Таким образом, хотя вы можете вручную изменить значение, новый объект с новым значением останется неизменным после десериализации.
И если вы спрашиваете, существует ли способ сериализации экземпляра неизменяемого класса A
, а затем десериализации данных как чего-то, что идентифицирует как экземпляр класса A
, но оказывается изменчивым, то ответ также нет , Сериализованные данные указывают, какой класс объекта представляется, но само определение класса не сериализуется. Таким образом, вы можете изменить указанный класс так, чтобы вы сериализовали экземпляр A
, а затем десериализовали экземпляр изменяемого класса B
, но это не то же самое, что вернуть изменяемый экземпляр A
.