後で使用するために例外への参照を保持することは合理的ですか?それとも、例外への参照をスロー/キャッチの相互作用よりも大幅に長く保持することに関連する落とし穴がありますか?
たとえば、次のコードがあるとします。
class Thing {
private MyException lastException = ...;
synchronized void doSomethingOrReportProblem() {
try {
doSomething();
} catch (MyException e) {
if (seemsLikeADifferentProblem(e, lastException)) {
reportProblem(e);
}
lastException = e;
}
}
}
私のプログラムが JVM と同じ寿命を持つ Thing を作成すると仮定すると、Thing が lastException への長引く参照を維持することに関連する正確性の問題はありますか? そして、これはJDK7でまったく変更されましたか? (OpenJDK7 の Throwable のソース コードを見ると、構築時に fillInStackTrace() を呼び出さずに Throwable を作成できる、JDK6 にはなかった新しい 4 つの引数のパブリック コンストラクターがあるようです。)
MyException の下のチェーンされた例外のいずれかにオブジェクトへの参照があった場合、はい、これにより、それらのオブジェクトがガベージ コレクションされるのを防ぐことができますが、それで問題ないと仮定すると、注意すべきトラップはありますか?