Если это должна быть сериализация Java, единственный известный мне способ - переопределить readObject()
и writeObject()
во всех классах, имеющих ссылку на экземпляр Location
, как показано в ответе Момо. Обратите внимание, что это не позволит вам сериализовать Location[]
и потребует от вас подкласса всех Collection<Location>
, присутствующих в вашем коде. Кроме того, требуется, чтобы поля типа Location
были помечены как переходные, что исключит их определения из записи в поток сериализации, что может помешать обнаружению несовместимых изменений класса.
Лучше было бы просто переопределить ObjectOutputStream.writeObject
. Увы, этот метод final
. Вместо этого вы можете переопределить ObjectOutputStream.writeObjectOverride()
, но этот метод не может делегировать реализацию по умолчанию, ObjectOutputStream.writeObject0()
, потому что этот метод private
. Конечно, вы можете вызывать приватный метод с помощью отражения, но ...
Поэтому я рекомендую проверить ваши ограничения. Это должна быть сериализация Java? Неужели вы не можете изменить определение класса Location
?
Если у вас есть исходный код для класса Location
, добавить implements Serializable
и добавить его в свой путь к классу довольно тривиально. Да, вам придется делать это снова всякий раз, когда вы обновляете библиотеку, но это может быть лучше, чем альтернатива ...