3

我想知道我是否可以使用 IDL 语言在 Apache Thrift 中定义“通用对象”,类似于 Java 中的“对象”类。

我需要发送任何类型的对象列表,但我不知道如何在 file.thrift 中定义它

像这样:

struct
{
   1: list<object> listObjects;
}

或者

struct
{
   1: list<?> listObjects;
}
4

1 回答 1

16

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 定义的类型。

于 2013-05-31T14:02:07.247 回答