繁体   English   中英

List <HashMap <String,Object >>的Thrift类型建模

[英]Thrift type modelling for List<HashMap<String,Object>>

我在Java中使用以下返回类型的服务方法:

List<HashMap<String,Object>>

我怎样才能在节俭中最好地塑造它?

很简单:

struct MyObjectData {
    // data of your objects
}

list< map< string, MyObjectData>>

你可能想把它变成一个类型:

typedef list< map< string, MyObjectData>>   MyObjectStructure

需要注意的是MyObjectData的数据结构。 如果按Object你的字面意思是任何 Object ,那么我们就遇到了问题。 Thrift无法处理这样的通用情况,因为它不支持彼此派生的结构(就像你可以用class做的那样)。 你可以做的是,使用一个包含不同类型结构的union ,其中一次只使用一个结构:

struct Foo { /* some fields */ }
struct Bar { /* some fields */ }

// a union allows us to store different kinds of structs in one list
union Generic {
  1: Foo foo
  2: Bar bar
}

// technically, a union is more or less a struct with optional fields, 
struct Alternative {
  1: optional Foo foo
  2: optional Bar bar
}

如果您需要派生结构,我通过这样做解决了这个问题:

struct Base { 
    // some fields
}

struct Derived { 
    1: Base base_
    // some more fields
}

这对我很有用。 如果你有一个深度继承树,它可能会变得有点痛苦,但在我的特定情况下情况并非如此。

AFAIK thrift不直接支持通用对象类型,这些类型可以是从您喜欢的任何对象进行类型转换的类型。 你必须像上面的例子那样专门定义你的对象。 您不能将返回类型作为Object。 这里有一个解决方法: Apache Thrift中的通用对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM