java - Apache Thrift 中的通用对象

标签 java thrift

我想知道我是否可以使用 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/

相关文章:

java - 从静态 AsyncTask 方法内部访问 Android UI 元素

java - 使用 viewpager.setCurrentItem(position) 传递一些数据

sockets - 何时以及为什么使用 Thrift 比使用简单的套接字/网络编程更好?

c++ - Apache thrift 在 VxWorks 上构建

java - (Class<?>) 和 getClass() 有什么区别?

java - Weka CSVloader - 错误(值的数量错误。读取)

java - JApplets : removing top and bottom bands

exception - Storm dprc thrift7.transport.TTransportException : Frame size (1213486160) larger than max length (1048576)!

hadoop - HBase Thrift 文件结束异常

mapreduce - 通过 Pig 提交 map/reduce 作业时捆绑 jars?