2011-09-25 30 views
0

假設我有一個類clubMember和一個類user。只有俱樂部會員可以成爲用戶,用戶的登錄數據是其他俱樂部會員變量的附加值,而俱樂部成員的特點會影響他們擁有的用戶的權利,因此user延伸clubMember將對象的類改爲子類(關於繼承的一般問題)

現在假設一個俱樂部成員想要使用我目前正在編程的grails servlet。創建一個新的user實例將導致一個雙重入口,再加上我將失去先前成員和其他類之間存在的所有鏈接。因此,可能將clubMember的類型轉換爲user將是繼續進行的最佳方式?如果是這樣,那怎麼可以做到(在Groovy中)?

或者,你能推薦一個除子類之外的實現方法嗎?理想情況下,像「列出所有成員」這樣的請求也應該返回用戶,這是甚至與子類的情況? (編輯:是這樣的,我的Grails應用程序)

相關:Java: Creating a subclass object from a parent objectIs it ever valid to convert an object from a base class to a subclass

+0

Groovy中有空格的類名? –

+0

@Hermal umm ..不..用於俱樂部會員的德語單詞沒有空格。 – mzuba

+0

您刪除了班級名稱中的空格,這很好。目前還不是很清楚你的問題是什麼。 「將clubMember類型轉換爲用戶」是什麼意思? –

回答

0

如果你想要某種類型的一個值成爲不同類型的新值,然後用Groovy已經基本兩種方式:

  1. asType:在例如爲「foo如欄」的Groovy將表達式轉換爲「foo.asType(Bar.class)」,這意味着可以添加asType方法對類FOO的至爲你做轉換。在你的情況下,你會添加asType到用戶,並讓它處理會員。
  2. 顯式或隱式轉換:在「(Bar)集合」中,Groovy將在Bar中查找一個構造函數,該構造函數可以爲該集合採用適當數量的參數,然後將創建一個新的Bar對象。實際上它不限於集合,數組也可以。無論如何...在你的例子中,你可以添加一個構造函數,將ClubMember帶到用戶,然後投射包含你想要轉換的成員的集合。在側面節點上...如果將集合分配給Bar類型的變量,則此轉換也會發生(隱式轉換)。

如果您不想在類中使用轉換方法(我很自由並且調用構造函數的轉換方法),您仍然可以使用asType版本或運行時元編程的類別來添加asType方法,或者根據需要使用構造函數。

但在他的評論暗示什麼添,有ClubMember爲用戶的成員似乎真的是最簡單的版本