Java 将静态类字段重置为初始值

Java 将静态类字段重置为初始值,java,reflection,Java,Reflection,我注意到这个问题是针对一个与单元测试相关的问题提出的,但我的问题是更一般的编程,我需要一些建议 我正在编写一个软件,它使用Java反射来选择和更改作为特定库一部分的字段的值。然后,我运行与库相关的代码,记录该字段的效果,然后转到另一个字段 问题是,我认为初始化库代码的行为会重置它需要运行的字段。事实证明不是这样。我不知道具体哪些字段可能已经更改,因为有很多字段,库相当大。所以我需要一种重置所有字段的方法,而不需要使用代码重新启动整个反射 我在其他问题中看到,类加载器可以通过重新加载受影响的类来做

我注意到这个问题是针对一个与单元测试相关的问题提出的,但我的问题是更一般的编程,我需要一些建议

我正在编写一个软件,它使用Java反射来选择和更改作为特定库一部分的字段的值。然后,我运行与库相关的代码,记录该字段的效果,然后转到另一个字段

问题是,我认为初始化库代码的行为会重置它需要运行的字段。事实证明不是这样。我不知道具体哪些字段可能已经更改,因为有很多字段,库相当大。所以我需要一种重置所有字段的方法,而不需要使用代码重新启动整个反射

我在其他问题中看到,类加载器可以通过重新加载受影响的类来做到这一点。但是评论还说,只有在您首先创建加载这些类的类加载器的情况下,这才有效


有人能提出任何方法来可靠地在正常Java执行中重置类的静态字段吗?

我会说,为每个类编写一个静态同步方法,重置所有属性,并且在调用classloader getClass.getClassloader时,我会说,为每个类编写一个静态同步方法,重置所有属性,并在调用classloader getClass时对其进行同步。getClassloader

保存初始值,更改它,并恢复旧值?@Jeffrey-我可以,但它们的数量很多,我不知道哪些可能已更改。我可以编写一些代码,在整个库中迭代并反射地保存我猜的所有值。事实上,使用不同的类装入器可以让您每次都从静态字段未被触及的新类开始。但你是否会被降职,这是非常值得怀疑的。也许可以解释更多关于你到底想做什么,以及什么是图书馆来找到一个更合适的解决方案。@mtrc-你怎么不知道哪些领域已经改变了?我以为是你的代码改变了字段?还是我误解了?您不能在更改字段之前保存它的旧值吗。然后你可以用它来恢复它。保存初始值,更改它,然后恢复旧值?@Jeffrey-我可以,但是有很多,我不知道哪些可能已经更改了。我可以编写一些代码,在整个库中迭代并反射地保存我猜的所有值。事实上,使用不同的类装入器可以让您每次都从静态字段未被触及的新类开始。但你是否会被降职,这是非常值得怀疑的。也许可以解释更多关于你到底想做什么,以及什么是图书馆来找到一个更合适的解决方案。@mtrc-你怎么不知道哪些领域已经改变了?我以为是你的代码改变了字段?还是我误解了?您不能在更改字段之前保存它的旧值吗。然后你可以用它来恢复它,这就是我最后所做的。我在工作开始时拍摄快照,并随时间重置它们。我使用了反弹库来帮助解决这个问题。这就是我最终所做的。我在工作开始时拍摄快照,并随时间重置它们。我使用了回弹库来帮助解决这个问题。