【问题标题】:how can I define a map accept different kind of value in thrift?如何定义地图以接受不同类型的 Thrift 值?
【发布时间】:2015-11-04 15:49:11
【问题描述】:

我用 thrift 定义了一个结构体:

struct QuerySetRecord {
    1:string recordId,
    2:string crawlerName,
    3:string recordType,
    4:map<string,string> dataMap,
    5:i16 priority,
}

问题是dataMap,我不仅要接受string的值,我可能还想接受ListMap,比如map&lt;string, list&lt;string&gt;&gt; dataMap。换句话说,我想要一个类型,比如 Java 中的根 Object,python 中的 object

我可以这样做吗?

【问题讨论】:

    标签: java python object dictionary thrift


    【解决方案1】:

    您必须创建自己的Object 并在其中列出所有可能的类。

    union Object {
       1: string str;
       2: i32 number32;
    }
    

    (因为我不确定联合实现在所有语言中如何工作,我会使用所有字段可选的结构)

    struct Object {
       1: optional string str;
       2: optional i32 number32;
    }
    

    然后:map&lt;string, Object&gt;

    在 Thrift 中,您不能创建“全部接受”字段,因为它不能完全跨语言移植,这是 Thrift 的关键功能之一。

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多