我寫了一個list()方法來檢索與一組過濾器匹配的域類實例列表,並且此方法用於不同的域類;代碼是一致,除了在其上GORM方法稱爲類是相同的:如何以通用的方式在域類上調用GORM方法?
商店=> Store.createCriteria()
客戶=> Client.createCriteria()
等。
爲了避免重複代碼,我試圖讓列表方法的通用版本,通過創建一個通用類:
class QueryUtils<T> {
def list(params) {
T.createCriteria()
[...]
}
}
這樣一來,我的每一個服務(StoreService,ClientService等)可以擴展QueryUtils:
class StoreService extends QueryUtils<Store>
class ClientService extends QueryUtils<ClientService>
等等,並繼承與其域類類型對應的list()方法。
的問題是,在執行過程中,這是行不通的,因爲有效的T類型是java.lang.Object繼承,而不是我指定的域類類型:
groovy.lang.MissingMethodException:否方法的簽名:static java.lang.Object.createCriteria()適用於參數類型:()values:[]
你知道如何解決這個問題嗎?
的確,常規接受語法,而不把它考慮的事實是非常容易引起誤解。 謝謝你的解決方案,它工作得很好。 –