2015-06-04 115 views
2

我正在研究一個使用Gson的大型Android項目。方法fromJson()在許多文件中被稱爲幾十次。每次調用此方法時,都需要提供一些特殊情況測試。如何在Java中重寫庫方法?

而不是通過和重複測試每次使用這種方法時,我想遵循DRY原則,並簡單地覆蓋fromJson()方法莫名其妙。

我的第一個想法是創建一個Gson的子類並重寫該方法,但我仍然必須做出幾十個(也許是數百個)更改才能完成此工作。但即使我願意做這項工作,Gson也是final,因此無法擴展。

第二個想法:它可能會改變Gson庫代碼。但我不想走這條路,因爲我擔心我可能會破壞那些完美無缺的東西。

這是我從未冒險過的Java領域。任何人有任何建議?

+0

你可以使用[Aspectj](https://eclipse.org/aspectj/)嗎? –

+0

從Mockito試試Spy:http://docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html - 你可以重寫一個方法,在那裏添加一些邏輯,然後調用真正的方法。 – user3707125

+0

我既沒有使用Aspectj也沒有使用Mockito。我不願意爲這個項目添加另一個庫,但我會花一個小時來研究這些可能性。 –

回答

0

由於沒有迴應,我會繼續前進並給出我自己的答案。

如果一個庫類/方法被聲明爲final,那麼整個問題就是永遠不會繼承或覆蓋該類。而且由於它是一個圖書館(我無法訪問源代碼),因此無法對其進行更改。

  • 解決方案#1:寫我自己的庫。這當然會擊敗使用庫的整個目的(以防止重新發明 車輪)。

  • 解決方案2:找到解決辦法。正如這聽起來,這是 可能是最合理的選擇。

  • 解決方案#3:與錯誤/錯誤/缺乏功能一起生活。並非所有的 問題都是show-stoppers。你可能有一個偉大的計劃 ,仍然不能達到每個所需的細節。

  • 解決方案#4:放棄該項目。有時這可能是一個可行的 選項。但這次不適合我。

+0

如果你不喜歡這個解決方案,隨時寫你自己的。如果它甚至有一半,我會給它一張支票。至少寫評論來解釋倒票! –