Я новичок в сериализации, так что это может быть простой вопрос, но мой гугл-фу сегодня слаб.
Предположим, у вас есть следующие классы:
public class Base implements Serializable {
// ...
}
public class Der1 extends Base {
// ...
}
public class Der2 extends Base {
// ...
}
Алиса случайным образом создает объект Der1
или Der2
, сериализует его в файл и отправляет Бобу. Боб знает, что класс этого объекта является подклассом Base
, но не знает, какой из них (у него те же определения классов, что и у Алисы). Как Боб может десериализовать файл как экземпляр правильного подкласса?
Моей первой мыслью было, что Алиса может определить класс следующим образом:
public DerClass implements Serializable {
public Class<? extends Base> class;
}
Она использует это для хранения класса объекта, сериализует его и отправляет Бобу. Боб создает из этого файла объект DerClass
, читает переменную class
, использует его для создания экземпляра соответствующего подкласса и считывает в него сериализованный объект. Будет ли это работать? Есть ли лучший способ?