2

単体テストに関連する問題に対してこの質問が提起されていることに気付きましたが、私の問題はより一般的なプログラミングであり、アドバイスが必要でした。

Java Reflection を使用して、特定のライブラリの一部であるフィールドの値を選択および変更するソフトウェアを作成しています。次に、ライブラリに関連するコードを実行し、フィールドの効果を記録して、別のフィールドに移動します。

問題は、ライブラリ コードを初期化すると、実行に必要なフィールドがリセットされると考えたことです。そうではないことがわかりました。また、具体的にどのフィールドが変更された可能性があるのか​​ わかりません(それらがたくさんあるため、ライブラリは非常に大きいため)。したがって、リフレクションを使用するコード全体を再起動する必要のない、すべてのフィールドをリセットする方法が必要です。

他の質問で、影響を受けるクラスをリロードすることで、ClassLoaders がこれを実行できる可能性があることを確認しました。しかし、コメントは、これらのクラスを最初にロードした ClassLoader を作成した場合にのみ機能するとも述べています。

通常のJava実行でクラスの静的フィールドを確実にリセットする方法を誰かが提案できますか?

4

1 に答える 1

0

私は、すべての属性をリセットする各クラスの静的同期メソッドを作成し、それを呼び出すたびにクラスローダーで同期すると言います(getClass()。getClassloader())

于 2012-08-26T14:49:09.663 に答える