Apache Thrift中的通用对象

时间:2013-05-30 20:57:01

标签: java thrift

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

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

像这样:

struct
{
   1: list<object> listObjects;
}

struct
{
   1: list<?> listObjects;
}

1 个答案:

答案 0 :(得分:12)

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