我想知道我是否可以使用 IDL 语言在 Apache Thrift 中定义“通用对象”,类似于 Java 中的“对象”类。
我需要发送任何类型的对象列表,但我不知道如何在 file.thrift 中定义它
像这样:
struct
{
1: list<object> listObjects;
}
或
struct
{
1: list<?> listObjects;
}
最佳答案
Apache Thrift 不支持结构继承或自引用结构。这使得你想做的事情变得不可能,直接传递一个多态列表。有一些方法可以解决这个问题,例如将对象序列化为二进制文件,然后传递二进制文件列表,在另一端对它们进行反序列化。
struct abc {
1: list<binary> myList,
}
所有 Apache Thrift 结构都有读取和写入方法,您可以使用这些方法将它们序列化到内存缓冲区 (TMemoryBuffer),然后您可以将其用作列表的二进制对象。另一种选择可能是使用联合。
union myTypes {
1: double dbl
2: i64 bigInt
3: SomeOtherStruct sos
}
struct abc {
1: list<myTypes> myList,
}
此方法创建一个 myTypes 联合类型的列表,但该联合可以包含您喜欢的任何 IDL 定义类型。
关于java - Apache Thrift 中的通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16845752/