ジェネリックスで何かをコーディングしようとしていますが、@SuppressWarningsを使用して回避する方法を理解できないようです。
私は次のものを持っています:
/**
* Cache to know which pool provided which object (to know where to return object when done)
*/
private Map<Object, ObjectPool<?>> objectPoolCache = new ConcurrentHashMap<Object, ObjectPool<?>>();
/**
* Returns a borrowed pool object to the pool
* @param o
* @throws Exception
*/
public void returnToPool( Object o ) throws Exception {
// safety check to ensure the object was removed from pool using this interfact
if( !objectPoolCache.containsKey(o))
throw new IllegalStateException("Object is not in pool cache. Do not know which pool to return object to");
// get the object pool
ObjectPool pool = objectPoolCache.remove(o);
// return the object to the pool
pool.returnObject(o);
}
現在、ObjectPool pool
生の型である警告と、returnステートメントでの型安全性の警告が表示されます。
私のコンセプトは次のとおりです。オブジェクトを返すプールを知るために、オブジェクトがどのプールから取得されたかがわかるように、オブジェクトとプールのペアのマップを作成しようとしています。
ObjectPoolは、任意のタイプのオブジェクトのObjectPoolにすることができます。特定のスーパータイプは必要ありません。
を使ってみまし<? extends Object>
たが、コンパイルエラーを起こさずに使う方法がよくわかりません。を置き換えるだけ<?>
で<? extends Object>
、メソッドがオブジェクトをパラメータとして使用するという問題が発生します。これは、オブジェクトを拡張するプールと矛盾します。
どんな援助もいただければ幸いです。
ありがとう!
エリック