簡體   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