アプリケーションにインターセプターを実装しようとしています。これにより、見たオブジェクトを追跡できます。今見ている物体が新しいものなのか、それとも再利用されたものなのかを判断できる必要があります。
次のようなインターフェースがあるとします。
public interface Interceptor {
void process(Object o);
}
これらのオブジェクトを追跡するセットを追加することを考えていました。でも、そのような振る舞いでメモリリークを起こしたくないので、別のパターンを考えた方がいいのではないでしょうか? 最終的に、これらのオブジェクトは他のレイヤーで破棄される可能性があります。
考えられる解決策は次のとおりです。
- オブジェクトの hashCode を Set に入れる
- HashSet の代わりに WeakHashSet を使用する
hashCode が一意ではない可能性があるため、最初のオプションは 100% 信頼できるとは言えません。2番目のオプションについては、これがメモリリークを防ぐかどうかはわかりません。
もう 1 つ注意してください。オブジェクトを変更することはできません。フィールドやメソッドを追加することはできません。ラッピングも不可です。
何か案は?