[英]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.