我在 Thrift
中定义了一组结构。从概念上讲,其中一些结构是公共(public)父类的子类。由于 Thrift 不支持结构继承,因此我使用以下策略来定义结构:
示例
假设A
和B
是父类型P
的子类型。以下是我的节俭定义来表示:
struct P {
1: i32 childType,
2: list<byte> payload
}
struct A {
1: i32 x
}
struct B {
1: i32 y
}
类型 A 和 B
的对象被序列化为类型 P
的记录(payload
字段将存储对象的序列化版本, childType
的值将指示序列化的有效负载是类型 A 还是 B
)。在反序列化期间,childType
字段的值将指示需要如何反序列化payload
。
但是,当使用 Java 或 Scala 等面向对象语言编写代码时,这种方法会带来困难。例如,在返回类型 P
对象的函数中,我无法返回类型 A
或类型 B
的结果。
问题
(i) 有推荐的方法来处理这个问题吗?即,如何将 Thrift
中继承的缺乏与利用继承的 Java/Scala
代码协调起来?
提前致谢。
最佳答案
我不知道 Java/Scala 是否有更好的方法,但在我们的例子中,添加一个指向其“ super ”Thrift 结构的附加 Thrift 结构成员可以满足我们的要求。
struct Foo {
1: i32 wtf
}
struct Bar {
1 : Foo super_
2 : double moredata
}
当然,这只是一种解决方法,但我们可以接受。
关于java - 协调 thrift 中继承的缺失与 Java/Scala 中的方法定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753651/