2012-07-20 40 views
0

我正在研究一個將被許多不同類型分類的類。有幾個靜態方法需要知道調用源自的子類的名稱。現在我知道我可以做這樣的事情在靜態方法JPA如何確定哪個類正在調用方法?

foo(Class clazz, String things, String... stuff){} 

,但我更願意讓用戶更容易,不必撥打電話如

Pass.retract(Pass.class, xxxx, yyyy); 

,而不是我D喜歡它看起來像

Pass.retract(xxxx, yyyy); 

現在,我知道JPA與它的find()函數做到這一點。我已經多次遍歷搜索函數,但似乎實體變量神奇地填充了。它是如何做到的?如果有任何專家有想法,我會非常感激。

+1

爲什麼不將「方便」的util方法添加到子類中? – jtahlborn 2012-07-20 16:24:33

+0

如果你有一個特定於它的調用者的邏輯的方法,這意味着調用者的一些邏輯是在這個方法中。將一個類的邏輯放在另一個類的方法中實際上從來都不是一個好主意 - 還有其他方法可以共享代碼。我建議你備份並考慮爲什麼你的設計需要這個構造,並確定如何擺脫它。 JPA正在爲完全不同的目的而做這件事,這些程序邏輯的基本規則不適用。 – arcy 2012-07-20 17:20:01

+0

邏輯沒有什麼不同。簡單地說,設置的字符串就會改變。本質上是做JPA做的,但是對於各種文件結構。每個子類都有自己的許多東西,但是除了類名外,還有少量的共享功能會逐字重複。我試圖這樣做是爲了向其他程序員實施的禮貌。 – CGuess 2012-07-20 17:44:35

回答

2

Play 1.x做了很多魔術,包括使用Javassist的查找方法。它是一種運行時字節代碼增強器,可以通過做一些「魔術」來隱藏用戶API的複雜性。這就是說,Play2選擇擺脫這種方式,因爲核心開發人員認爲,當人們試圖維護核心代碼庫時,魔法太難理解了。

+0

我仍在使用Play 1.2.x,所以我不完全知道2.x是如何工作的。你能詳細說明一下嗎? – CGuess 2012-07-20 17:45:30

+0

玩2沒有任何魔法。它使用特定的設計模式。 – Codemwnci 2012-07-20 19:59:39

相關問題