2014-02-06 48 views
0

我正試圖實現以下功能。我有幾個具有一些基本方法的模型,例如saveModel,loadModel,laodModel。現在,我有其他擴展此模型的類,例如用戶和電影。將變量自動寫入子類

用戶現在有變量

id 
userName 
userMail 
userPW 

電影有

id 
movieTitle 
movieLength 
movieGenre 

現在,我創建了一個新的用戶對象,並從數據庫中加載它。所以,現在我當我加載從電影的典範,我有一個包含以下信息的JSON對象:

id = x 
movieTitle = "bla" 
movieLength = "bla" 
movieGenre = "bla" 

正如你所看到的,JSON中包含了正確的密鑰和值,現在我只是把它們寫進入孩子模型。這怎麼可能,我的模型現在將所有的字段值寫入用戶對象?在PHP中我會做它只是喜歡這個

foreach ($row as $key=>$val) { 
      $this->$key = $val; 
} 

在Java中,但它似乎並不可能。那麼父類如何自動將變量寫入子類。或者這不可能,我必須手動執行它?我在這裏看到的問題是,我必須再次爲每個模型做這件事,那時我可以在超類中做。我會怎麼做?

回答

1

實現此目的的一種方法是定義父類以使地圖包含所有可能的字段;並讓子類將其字段定義爲包含在枚舉中。因此,從父類級別,您只需序列化所有的地圖及其鍵值對。使用enum作爲參數的泛型爲您提供了使用哪種鍵/鍵類型的靈活性。

話雖如此,最好你有一個生成子類的代碼生成器;如果你願意,你也可以爲指向地圖中特定鍵的每個字段生成單獨的方法。

+0

是的,這就是我現在所做的。我現在將編輯我的問題供其他人查看。還有更好的方法來做到這一點? – Musterknabe

+0

@Musterknabe坦率地說,我認爲這種方法已經足夠好了。在獲得者,制定者和IO成本方面沒有任何性能損失。如果添加每個字段方法調用具有特定字段的地圖,則代碼的可讀性幾乎沒有什麼缺點;只要你使用枚舉,它本質上是一個內存中的數組,所以不會造成太多的內存損失。所以我覺得這很好。 –