2012-08-22 32 views
2

我注意到這個問題與單元測試相關的問題,但我的問題是更一般的編程,我想要一些建議。將靜態類字段重置爲初始值

我正在寫一段軟件,它使用Java反射來選擇和改變作爲特定庫的一部分的字段的值。然後我運行與庫相關的代碼,記錄該字段的效果,然後轉到另一個字段。

問題是我認爲初始化庫代碼的行爲會重置它需要運行的字段。原來它不是。我不知道哪些字段可能會有變化(因爲有很多字段,圖書館很大)。所以我需要一種重置所有字段的方式,不涉及重新啓動我的整個使用反射的代碼。

我在其他問題中看到ClassLoaders可能能夠通過重新加載受影響的類來完成此操作。但評論也表示,這隻有在你首先創建加載這些類的ClassLoaders時纔有效。

任何人都可以提出任何方式來可靠地重置在正常的Java執行類的靜態字段?

+0

保存初始值,改變它,並恢復舊的價值? – Jeffrey

+0

@傑弗裏 - 我可以,但是他們有很多人,我不知道哪些人可能已經改變。我可以編寫一些迭代遍歷整個庫的代碼,並反思保存所有我猜測的值。 – mtrc

+0

實際上,使用不同的類加載器將允許您每次啓動靜態字段仍未觸及的新類。但是,你可以減少這樣做更是令人懷疑。也許可以解釋更多關於你想要做什麼以及什麼是圖書館來找到更合適的解決方案。 –

回答

0

我想說,無論你把它的類加載器同步寫重置所有屬性爲每個類靜態同步方法時(的getClass()。getClassloader())

+0

這就是我最終做的。我在工作開始時拍攝快照,並且隨着時間的推移重置它們。我用Rebound lib來幫助這個(https://bitbucket.org/gigadot/rebound/wiki/Home)。 – mtrc