我想知道我是否可以使用 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 定义的类型。