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 节俭不直接支持通用对象类型,这些对象类型可以转换为您喜欢的任何对象/从您喜欢的任何对象进行类型转换。您必须按照上面的示例专门定义对象。不能将返回类型作为 Object。这里提到了一个解决方法:Apache Thrift 中的通用对象

最新更新