@delphikettle
Программирую в свободное от учёбы время

Как сериализовать и десериализовать интерфейсы?

Имеется класс экземпляр которого необходимо сериализовать, а потом соответственно десериализовать, который имеет в себе поля-интерфейсы, которые в процессе работы программы могут быть разными экземплярами анонимных классов реализующих эти интерфейсы. Теперь вопрос, как можно сериализовать эти экземпляры, да так, чтобы при десериализации, восстанавливались все анонимные классы. То есть проблема заключается в правильности хранения действий в интерфейсах.
Можно, в принципе, чтобы каждый интерфейс имел измеряемое поле name, содержащее в себе информацию об анонимном классе, а потом создавать экземпляр такого класса по имени, но тогда будет слишком много вариантов имени. И при десериализации придётся рассматривать много возможных исходов.
Что мне делать? Как это правильно сделать?
  • Вопрос задан
  • 1165 просмотров
Пригласить эксперта
Ответы на вопрос 3
@1Michael1
Ответ написан
Комментировать
timych
@timych
Если переменные представляют наследников одного общего типа(интерфейса), то вслучае с json вам необходимо аннотировать его аннотацией @JsonSubTypes, в которой нужно перечислить всех наследников. Когда получите десереализованный обьект, просто через instanceof проверяете принадлежность к необходимому типу (классу) и кастите обьект до этого класса. Вот простой пример (лень самому писать :)): https://nickebbitt.wordpress.com/2014/01/31/handli...

PS: В примере есть ошибка - абстрактный класс Animal должен имплементировать Serializable
Ответ написан
@bromzh
Drugs-driven development
Если используешь Jackson, то смотри тут и тут.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы