ジェネリックでコードを作成しようとしていますが、@SuppressWarningsを使用して回避する方法を理解できないようです。@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>
に置き換えるだけで、私のメソッドがObjectをパラメータとして使用する問題が発生します。これは、Objectを拡張するプールと矛盾します。
ご協力いただければ幸いです。
ありがとうございます!
エリック
これは私が思っていたものとほとんど同じですが、おそらくジェネリックの洞察力のある人には素晴らしい解決策があると考えていました。ないと思います。 :) –