Я определил набор структур в Thrift
. Концептуально некоторые из этих структур являются подклассами общего родительского класса. Поскольку Thrift
не поддерживает наследование структур, я использовал следующую стратегию для определения структур:
Пример
Скажем, A
и B
являются подтипами родительского type P
. Вот мои определения бережливости, чтобы представить это:
struct P {
1: i32 childType,
2: list<byte> payload
}
struct A {
1: i32 x
}
struct B {
1: i32 y
}
Объекты type A and B
сериализуются как записи type P
(поле payload
будет хранить сериализованную версию объекта, а значение childType
будет указывать, относится ли сериализованная полезная нагрузка к type A or B
). Во время десериализации значение поля childType
указывает, как нужно десериализовать payload
.
Однако этот подход создает трудности при написании кода на объектно-ориентированном языке, таком как Java или Scala. Например, в функции, которая возвращает объект type P
, я не могу вернуть результат type A
или type B
.
Вопрос
(i) Существует ли рекомендуемый подход к решению этой проблемы? т. е. как примирить отсутствие наследования в Thrift
с кодом Java/Scala
, который использует наследование?
Заранее спасибо.