私がやりたいことが実現可能かどうかはわかりませんが、可能であれば、その方法を知りたいです。基本的に、キーがクラス(java.lang.Class
)で、そのエントリの値がクラスのインスタンスであるマップを作成したいと考えています。現在、
private Map<Class<?>, Object> myMap = new HashMap<Class<?>, Object>();
ただし、これは任意のオブジェクトをマップに配置できることを意味します。可能であれば、キー内のクラスのインスタンスのみをマップに配置できるようにしたいと考えています。これを確実にするために、クラスで ? パラメーター化を使用する方法はありますか?
また、私は、メモリリークの可能性このようなことをするとき。これがどのように起こるのか、完全には理解できていません。マップにシングルトン オブジェクトのみを貼り付けるつもりなので、メモリ リークの懸念はまだありますか? もしそうなら、どうすればそれを防ぐことができますか?
ベストアンサー1
Java の型システムは、直接記述している型制約を強制するほど強力ではないため、これを機能させるには、安全でないキャストを実行するか、Map
型の安全性を強制する他の API でラップする必要があります。グアバの ClassToInstanceMap
まさにこのユースケースでは、Map
それが機能するためにインターフェースに追加の制限を課す外部的に安全な API を提供します。(開示: 私は Guava に貢献しています。)
これがメモリ リークを引き起こす可能性があるのは、ここで使用しているクラスの一部がアプリケーションの存続期間中保持されない場合のみです。これは、特に未使用のクラスのアンロードをあまり気にしない「サーバー側」アプリケーションを作成している場合、多くのユーザーにとって問題にはなりません。